在Java中使用Reflections时出错

时间:2011-09-20 18:59:09

标签: 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" );
    }
}

1 个答案:

答案 0 :(得分:5)

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

如果您的班级名称如下:

com.mycorp.SomeClass

并且它没有

public SomeClass(Object object) {
  ...
}

构造函数,然后ctr将为null。如果它确实有这样的构造函数,那么在没有为Object参数提供值的情况下请求新实例只会遇到麻烦。

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