这很好用:
this.getClass().getConstructor(null).newInstance(null);
但我想摆脱这个警告:
“应将 null 类型的参数显式转换为 Class[],以便从 Class 类型调用 varargs 方法 getConstructor(Class...)。它也可以转换为 Class 以进行 varargs 调用”
这很好用:
this.getClass().getConstructor(null).newInstance(null);
但我想摆脱这个警告:
“应将 null 类型的参数显式转换为 Class[],以便从 Class 类型调用 varargs 方法 getConstructor(Class...)。它也可以转换为 Class 以进行 varargs 调用”
你说:
这很好用:
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()
. 然后你需要遍历结果数组来选择你想要的构造函数。
如果您尝试做其他事情,则需要解释。