Java反射:在内部静态类中调用函数
我的简单的Java反射:在内部静态类中调用函数,java,reflection,Java,Reflection,我的简单的学校课程如下所示: public class School{ ... public static class Student{ public void register(){ ... } } } 如上所述,学校类有一个名为学生的内部公共静态类。在Student中定义了一种方法register() 在我的主要功能中,我可以通过以下方式加载内部静态Student类: Class<?> studentClass
学校
课程如下所示:
public class School{
...
public static class Student{
public void register(){
...
}
}
}
如上所述,学校
类有一个名为学生
的内部公共静态类。在Student
中定义了一种方法register()
在我的主要功能中,我可以通过以下方式加载内部静态Student
类:
Class<?> studentClass = Class.forName("School$Student");
Class studentClass=Class.forName(“学校$Student”);
我想知道,通过上面这行代码,我如何才能以java反射方式调用register()
函数。如果您有一个有效的类,那么您可以通过以下方式访问和调用其方法:
Method register = studentClass.getDeclaredMethod("register");
register.invoke(studentClass.newInstance());
但是我的学生类是一个没有空构造函数的静态类。“newInstance()”调用将导致exception@Mellon它有任何构造函数吗?@Mellon每个类都有其默认构造函数(即使是嵌套的/内部的),除非您创建单独的构造函数。另外,默认构造函数将与类具有相同的可见性,因为Student
是public
类,所以您可以从任何地方访问此构造函数。@根据您的问题Student
中的示例,Mellon没有任何构造函数,因此您可以将默认构造函数与studentClass.newInstance()
一起使用。但是如果它确实有构造函数,你可以用studentClass.getConstructor(parameterTypes)
选择其中一个,然后用getConstructor
中描述的参数调用它的newInstance
方法,比如studentClass.getConstructor(int.class,String.class).newInstance(1,“abc”)代码>。这将解决缺少默认构造函数的问题。