用反射调用空arg构造函数的编译器警告

jca*_*314 2 java

这非常有效:

this.getClass().getConstructor(null).newInstance(null);
Run Code Online (Sandbox Code Playgroud)

但我想摆脱这个警告:

"类型为null的参数应该显式地转换为Class [],以便从类型Class调用varargs方法getConstructor(Class ...).或者可以将其转换为类以进行varargs调用"

Ste*_*n C 5

你说:

这非常有效:

this.getClass().getConstructor(null).newInstance(null);
Run Code Online (Sandbox Code Playgroud)

事实上它并不"很好".它编译(带有重要的警告),然后编译的代码会产生运行时异常.

你的代码实际上等同于:

  this.getClass().getConstructor((Class[]) null).newInstance(null);
Run Code Online (Sandbox Code Playgroud)

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


那修复是什么?