String str = "aa";
Class cla = Class.getClass();
Method mt = cla.getDeclaredMethod("put",??);
........//另一个类;
public class aa
{
public void put()
{
........
}
} 想请问下,getDeclaredMethod("put",??);的第二个参数到底是什么啊?参数是 Class 对象的一个数组,它按声明顺序标识该方法的形参类型;api上是这样写的;怎么会是Class对象的数组呢?或者说改参数表示所调用方法的形参,当我的put()方法没有参数传入的时候能用Null来代替吗?
二、我的另一个类中必须要有main()函数吗?
Object... args)
obj - 从中调用底层方法的对象
args - 用于方法调用的参数
很迷糊……希望高手解释下……
如果没有参数的话,是可以用null来替代的二、如果你要是运行的话,当然要有一个类中有main函数了,如果不运行的话,自然就不需要了.这行定错了吧Class cla = Class.getClass();应该是Class cla = Class.forName(str);
Mehtod method;
method.invoke(obj,args);说明,你要调的这个method是obj对象的,因为普通的方法都是属于对象的,平常我们调的时候,是要先实例化一个对象,然后obj.method(args)就可以了,反射的时候也是需要这个对象的。args就是调用这个方法的实参呀实际上就是等于obj.method(args),只是用反射的时候,我们不知道这个对象的方法名的时候,就可以反射去调,或者说是我只要把方法名和实参,类名都写到一个文本文件中,这样就可以根据文本文件支态去调用相应的类和方法,而不是去改代码
比如一个方法定义如下 put(String str,Date date) {}
你的方法有两个参数,一个是String ,一个是Date
就应该通过下面的语句得到这个Method对象
Method mt = cla.getDeclaredMethod("put",new Class[]{String.class,Date.class});
没有参数 就传一个null过去就可以了
只有你的启动类才需要main函数
Object... args意思就是,这个方法,除了第一个参数obj以外的剩余的参数都装入一个Objetc[]里,例如
你调用的时候这样
method.invoke(instance,new Srting("agr1"),new String("arg2"));
这个时候在这个invoke函数内部会把后面2个参数整成,new Object[]{new Srting("agr1"),new String("arg2")}的~!这样明白了八!还有Method mt = cla.getDeclaredMethod("put",??);
至于这个,比如Method mt = cla.getDeclaredMethod("put",String.class,String.class);这个意思,也就是这个方法的2各参数是2个String类型,你也可以这样String.class,int.class~!
Class cla = Class.getClass();
是我自己敲错了;实际程序中我是写的Class cla = Class.forName(str);
可是getDeclaredMethod("put",??);方法一直报错;
如果该方法是有参数的的,那我getDeclaredMethod("put",??);中应该怎样写呢?比如
put(int i,String str)
{
}
这样呢?
后面的参数是对应的方法的参数。如你的put方法里面有一个参数,那你这里应该传String.class。
二、另一个类中必须要有main()函数吗?
不需要,你只要获取另一个类的方法(得到的是一个Method类的对象),然后调用其invoker方法可以调用。
getDeclaredMethod("put",new Class[]{int.class,String.class});
还是错误;
还是谢谢大家!
cla.getDeclaredMethod("put",new Class[]{String.class,Date.class});
改方法中的第二个参数写Null怎么都不行;郁闷……方法报错;
没有参数的时候用null呀
像你这样的参数的话,用
getDeclaredMethod("put",new Class[]{int.class,String.class}});
方法找不到符号;是参数错误吧;
put()方法没有形参;我就写了null;
编译过不了?
public static void main(String args[]) throws Exception {
Class cl = Test.class;
Method me1 = cl.getDeclaredMethod("put",new Class[]{int.class,String.class});
Method me2 = cl.getDeclaredMethod("put",null);
me1.invoke(new Test(), new Object[]{1,"hello"});
me2.invoke(new Test(), null );
} public void put(int i, String str) {
System.out.println(str+" "+i);
}
public void put() {
System.out.println("@@@@@@@@@@@@@@@@@@@");
}
}
cla.getDeclaredMethod("put",new Class[]{});
应该可以