【发布时间】:2013-12-22 23:10:12
【问题描述】:
我使用了here的代码:
public Object loadService() throws Exception {
ClassLoader parentClassLoader = ServiceReloader.class.getClassLoader();
ServiceReloader classLoader = new ServiceReloader(parentClassLoader);
Class aClass = classLoader.loadClass("pl.jcubic.Service");
Constructor<?> ctor = aClass.getConstructor(new Class[] { String.class });
return ctor.newInstance(new Object[] { cwd() });
}
(ServiceReloader 是一个扩展 ClassLoader 加载文件 pl/jcubic/Serice.class 的类) (我的 Service 类如何使用两个构造函数,一个带一个参数 String,一个 null 一个)。
当我调用该代码时,我得到了:
init.java:40: warning: [unchecked] unchecked call to getConstructor(Class<?>...) as a member of the raw type Class
Constructor<?> ctor = aClass.getConstructor(new Class[] { String.class });
^
where T is a type-variable:
T extends Object declared in class Class
1 warning
我对泛型不是很熟悉,因为当我学习 Java 时,它们并没有包含在该语言中。
我尝试输入Class<?>[],但得到了同样的警告。有没有办法抑制这个警告?
【问题讨论】:
-
为什么在
getConstructor或newInstance中显式使用数组? Varargs 应该让您将它们用作getConstructor(String.class);和newInstance(cwd())。 -
@Pshemo 我发现在 SO 的另一个问题中(链接在问题中),您可以对该问题给出更好的答案。
标签: java generics reflection warnings