Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java反射:在内部静态类中调用函数_Java_Reflection - Fatal编程技术网

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”)。这将解决缺少默认构造函数的问题。