2

这很好用:

this.getClass().getConstructor(null).newInstance(null);

但我想摆脱这个警告:

“应将 null 类型的参数显式转换为 Class[],以便从 Class 类型调用 varargs 方法 getConstructor(Class...)。它也可以转换为 Class 以进行 varargs 调用”

4

1 回答 1

6

你说:

这很好用:

this.getClass().getConstructor(null).newInstance(null);

事实上,它并不“工作得很好”。它编译(带有重要的警告),然后编译的代码给出运行时异常。

您的代码实际上等同于:

  this.getClass().getConstructor((Class[]) null).newInstance(null);

这是导致问题的getConstructor((Class[]) null)呼叫。该调用是说“给我一个构造函数......但我不是说参数类型是什么”。那是行不通的。该getConstructor(Class ...)方法不进行通配符/模糊匹配。(编译器建议的替代方案getConstructor((Class) null)......也不起作用。)


那么解决方法是什么?

  • 如果你试图选择“no-args”构造函数,那么你应该这样写:

     getConstructor()
    

    或者

     getConstructor(new Class[0])   // equivalent
    

    或者用这个替换完整的语句:

     this.getClass().newInstance()
    
  • 如果您尝试选择“任何带有一个参数的构造函数”或类似的东西,那么您将需要使用getConstructors(). 然后你需要遍历结果数组来选择你想要的构造函数。

  • 如果您尝试做其他事情,则需要解释。

于 2013-08-11T00:12:14.647 回答