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