这非常有效:
this.getClass().getConstructor(null).newInstance(null);
Run Code Online (Sandbox Code Playgroud)
但我想摆脱这个警告:
"类型为null的参数应该显式地转换为Class [],以便从类型Class调用varargs方法getConstructor(Class ...).或者可以将其转换为类以进行varargs调用"
你说:
这非常有效:
Run Code Online (Sandbox Code Playgroud)this.getClass().getConstructor(null).newInstance(null);
事实上它并不"很好".它编译(带有重要的警告),然后编译的代码会产生运行时异常.
你的代码实际上等同于:
this.getClass().getConstructor((Class[]) null).newInstance(null);
Run Code Online (Sandbox Code Playgroud)
getConstructor((Class[]) null)这是引起问题的电话.那个电话是说"给我一个构造函数......但我不是说参数类型是什么".这不起作用.该getConstructor(Class ...)方法不进行通配符/模糊匹配.(编译器建议的替代方案getConstructor((Class) null)......也不会起作用.)
那修复是什么?
如果您尝试选择"no-args"构造函数,那么您应该像这样编写它:
getConstructor()
Run Code Online (Sandbox Code Playgroud)
要么
getConstructor(new Class[0]) // equivalent
Run Code Online (Sandbox Code Playgroud)
或用以下内容替换完整的声明:
this.getClass().newInstance()
Run Code Online (Sandbox Code Playgroud)如果您尝试选择"任何带有一个参数的构造函数"或类似的东西,那么您将需要使用getConstructors().然后,您需要遍历结果数组以选择所需的构造函数.
如果你想做别的事情,你需要解释一下.