我在学习java的反射时候,遇到一个方法:getDeclaredMethod(String name,Class...parameterType);举例:
Method m=c.getDeclaredMethod("Study",____),
询问空格里面该选择哪一项?
A.String, int.
B."zhangsan,20
C.String.class,int class
D."String calss " "int class".
答案选:C.
对这一项不是很懂,请教为什么?
对于C那个类型的写法不是很懂。
------解决方案--------------------
getDeclaredMethod(String name,Class...parameterType)第一个参数是函数名 字符串类型 第二个是一个可变参数 ,传入的是那个函数(如你所讲的“study”函数)的字节码 参数是String类型的话就得传入String.class int类型的就的是int.class
------解决方案--------------------
getDeclaredMethod(String name,Class...parameterType);
这个方法是接受一个String类型参数,一个或者任意多个class类型的参数
所以选择C int.class是正确的等价于Integer.TYPE;Integer.class;其实用第三种会更加容易理解
------解决方案--------------------
public class Test {
public void test(int x){
System.out.println(x);
}
public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
//error: Exception in thread "main" java.lang.NoSuchMethodException: com.webex.learning.Test.test(java.lang.Integer)
/* Class<?> forName = Class.forName("com.webex.learning.Test");
Method method = forName.getDeclaredMethod("test", Integer.class);
method.invoke(forName.newInstance(), 10);*/
Class<?> forName = Class.forName("com.webex.learning.Test");
Method method = forName.getDeclaredMethod("test", int.class);
method.invoke(forName.newInstance(), 10);
}
}
测试了下:
说明(1)int.Class和integer.class不是一回事情
------解决方案--------------------
getDeclaredMethod(String name,Class...parameterType);
String name是方法名
Class...parameterType 这个是参数类型列表
比如一个方法 public void setUserName(String userName);
setUserName方法名对应就对应String name
String name这个参数对应Class...parameterType因为要求的是Class类型的参数所以用String.class
楼主敲敲代码就知道了
另外int等基本类型是有class属性的,不知道的别瞎说