在Java中使用Reflections时出错

cod*_*er9 -2 java reflection casting

我在此代码中遇到了转换问题,但不知道如何纠正它.

public void showFrame(String className, Object controller) throws Exception{
    try {
       Class c = Class.forName("com." + className);
       // "(Object.class)" I want this to be of type held in className var
       // this type will be same as one passed into  "controller" at runtime
       Constructor ctr = c.getConstructor(Object.class);  
       ctr.newInstance(controller);
    } catch (ClassNotFoundException ex) {
        JOptionPane.showMessageDialog(null, "Error" );
    }
}
Run Code Online (Sandbox Code Playgroud)

Edw*_*uck 5

getConstructor 从相关类的可能现有构造函数中进行选择.

如果您的班级名称如下:

com.mycorp.SomeClass
Run Code Online (Sandbox Code Playgroud)

它没有

public SomeClass(Object object) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

构造函数,然后ctr将为null.如果它确实有这样的构造函数,那么在不提供Object参数值的情况下请求新实例只是在寻找麻烦.

此外,只有在类不存在时才会捕获,不能找到构造函数,或者安全管理器拒绝创建新类,或者是否使用错误数量的参数调用构造函数等.