| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4635 人关注过本帖
标题:【求助】关于java.lang.Class类调用的问题?
只看楼主 加入收藏
godlw
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-10-13
收藏
 问题点数:0 回复次数:5 
【求助】关于java.lang.Class类调用的问题?

源代码:
import java.lang.reflect.*;

class ClassTest
{
public static void main(String[] args)
{
if(args.length!=1)
{
return;
}
try
{
Class c=Class.forName(args[0]);
Constructor[] cons=c.getDeclaredConstructors();
Class[] params=cons[0].getParameterTypes();
Object[] paramValues=new Object[params.length];
for(int i=0;i<params.length;i++)
{
if(params[i].isPrimitive())
{
paramValues[i]=new Integer(i+3);
}
}
Object o=cons[0].newInstance(paramValues);
Method[] ms=c.getDeclaredMethods();
ms[0].invoke(o,null);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
class Point
{
static
{
System.out.println("loading Point");
}
int x,y;
void output()
{
System.out.println("x="+x+",y="+y);
}
Point(int x,int y)
{
this.x=x;
this.y=y;
}
}

错误信息:
F:\javalesson\lesson\ClassTest.java:26: 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;
对于 varargs 调用,应使用 java.lang.Object
对于非 varargs 调用,应使用 java.lang.Object[],这样也可以抑制此警告
ms[0].invoke(o,null);
^
1 警告


不知道是什么意思啊,请大家帮满看下,谢谢

搜索更多相关主题的帖子: java lang Class 
2007-11-06 22:30
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
ms[0].invoke(o,null);
因为JDK1.5以后支持可变参数,你这样写是不明确的

因为编译器不知道你是不想传参数呢,还是想传一个null的参数呢?
所以,如果你不想传参数的时候,可以用ms[0].invoke(o,new Object[0])就可以了,它表示参数的长度是0
也可以这样

Object[] objs=null;
ms[0].invoke(o,objs);

这样就不会有岐义了

可惜不是你,陪我到最后
2007-11-07 09:23
godlw
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-10-13
收藏
得分:0 
非常感谢啊

2007-11-07 10:20
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 
因为JDK1.5以后支持可变参数,你这样写是不明确的
个人认为 后半句正确,至于前半句有点牵强了

所有的oop 语法里面null表示空,任何对象都可以是null,所以直接使用null会导致编译器无法知道你到底调用的是哪一个重载了
也就是不管是jdk多少版本都有这个限制,甚至是整个oop

[此贴子已经被作者于2007-11-7 11:38:01编辑过]


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2007-11-07 11:37
godlw
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-10-13
收藏
得分:0 
好像jdk1.4的可以的啊

2007-11-08 14:30
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
以下是引用时空之蕊在2007-11-7 11:37:30的发言:
因为JDK1.5以后支持可变参数,你这样写是不明确的
个人认为 后半句正确,至于前半句有点牵强了

所有的oop 语法里面null表示空,任何对象都可以是null,所以直接使用null会导致编译器无法知道你到底调用的是哪一个重载了
也就是不管是jdk多少版本都有这个限制,甚至是整个oop

重载是什么意思,是方法名一样,而参数不一样,参数的不一样可以体现在个数方面也可以体现在类型上面

既然已经是Object类了,所以它可以包容一切参数,但是如果是可变的话,那就不行了,因为null可以表示一个空的数组,也可以表示一个空的对象,其实数组也可以像是一个对象,所以只有在可变参数的时候,编译器才不知道我们想调用哪个方法,是想把null表示一个空的数组呢,还是想把null做为第一个参数传进去呢


可惜不是你,陪我到最后
2007-11-09 09:26
快速回复:【求助】关于java.lang.Class类调用的问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026598 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved