java:未选中对getConstructor的调用(java.lang.Class<;?>;…)
我正在使用反射构造一个类(ConfigBuilder),该类将文件作为参数:java:未选中对getConstructor的调用(java.lang.Class<;?>;…),java,reflection,Java,Reflection,我正在使用反射构造一个类(ConfigBuilder),该类将文件作为参数: Class myClassType = Class.forName(className); Class[] types = new Class[] { File.class }; Constructor cons = myClassType.getConstructor(types); Object[] constructorArgs = new Object[] { myFile }; cb = (ConfigBui
Class myClassType = Class.forName(className);
Class[] types = new Class[] { File.class };
Constructor cons = myClassType.getConstructor(types);
Object[] constructorArgs = new Object[] { myFile };
cb = (ConfigBuilder) cons.newInstance(constructorArgs);
但我得到这个警告:
warning: [unchecked] unchecked call to getConstructor(java.lang.Class<?>...) as a member of the raw type java.lang.Class
Constructor cons = myClassType.getConstructor(types);
警告:[未选中]未选中对作为原始类型java.lang.Class成员的getConstructor(java.lang.Class…)的调用
构造函数cons=myClassType.getConstructor(类型);
显然,getConstructor需要一个泛型类型,所以我尝试了以下方法:
Class<?>[] types = new Class<?>[] { File.class };
Class[]types=新类[]{File.Class};
但我得到了同样的警告信息
有什么想法吗
David警告实际上指的是
myClassType
。您还需要对其进行参数化(以及cons
)
Class myClassType=Class.forName(className);
类[]类型=新类[]{File.Class};
构造函数cons=myClassType.getConstructor(类型);
首先,这只是一个警告,在处理编译时未知的反射和类型时,不应引起过度的警告。泛型的优点是更强的编译时类型检查和调用Class.forName(className)
然而,如果你和大多数人(包括我)一样,那么你可能想摆脱这个警告,这样它就不会继续不必要地吸引你的注意力。为此,您可以参数化构造函数变量cons
:
Class<?> myClassType = Class.forName(className);
Class<?>[] types = new Class[] { File.class };
Constructor<?> cons = myClassType.getConstructor(types);
Class myClassType=Class.forName(className);
类[]类型=新类[]{File.Class};
构造函数cons=myClassType.getConstructor(类型);
这非常有效,只需添加您可以使用的classmyclasstype=SpecificClass.Class在我的情况下。
Class<?> myClassType = Class.forName(className);
Class<?>[] types = new Class[] { File.class };
Constructor<?> cons = myClassType.getConstructor(types);