java:未选中对getConstructor的调用(java.lang.Class<;?>;…)

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

我正在使用反射构造一个类(ConfigBuilder),该类将文件作为参数:

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.ClassClass<?> myClassType = Class.forName(className);
Class<?>[] types = new Class[] { File.class };
Constructor<?> cons = myClassType.getConstructor(types);