因此,在通过Reflection获取方法的参数时:
Class<?>[] params = m.getParameterTypes();
Run Code Online (Sandbox Code Playgroud)
假设我循环遍历方法并寻找只有一个参数的方法:
if(params.length > 1) {
continue;
}
Run Code Online (Sandbox Code Playgroud)
如果params数组的长度为1,则获取该参数:
Class<?> par = params[0];
Run Code Online (Sandbox Code Playgroud)
当我尝试使用getClass()方法打印参数的类时,它返回java.lang.Class.
但是,当我使用getSuperclass()方法获取超类时,它返回超类.
例如:
System.out.println(par.getClass());
System.out.println(par.getSuperclass());
Run Code Online (Sandbox Code Playgroud)
假设我们所拥有的方法的参数是一个名为"PlayerDeathEvent"的类,它扩展了抽象的"Event"类.
话虽这么说,输出将是:
java.lang.Class
org.mypackage.Event
Run Code Online (Sandbox Code Playgroud)
有没有理由发生这种情况?我用getCanonicalName找到了解决这个问题的方法,但我很好奇为什么会这样.
该getClass()方法是Object返回Class实例的对象的方法.你有一个Class对象,所以getClass()返回Class的对象Class类-不同的Class比什么par是一个实例.
但是,getSuperclass()定义Class的方法返回Class类的超类的对象,而不是Class返回的类的超类getClass().
要获得PlayerDeathEvent,请致电getName().
System.out.println(par.getName());
Run Code Online (Sandbox Code Playgroud)