我已经阅读了这篇文章
java:对getConstructor(java.lang.Class<?>…)的未检查调用
for (Map.Entry<String, Class> entry : connectionRepository.entrySet()) {
if (/*someconditionhere*/) {
try {
cwsConnection = (CWSConnection)entry.getValue().getConstructor().newInstance();
break;
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
logger.error("Could not Create instance of CWSConnection for site version:"{}" Error:"{}"", entry.getKey(), e.getMessage(), e);
}
}
}
在编译这段代码时,我收到了一个警告
警告:未检查的调用getConstructor(Class…)作为原始类型Class 的成员
我只是想获得CWSConnection的默认构造函数,因此,我不应该将任何参数传递给getConstructor(Class…)方法。有没有更好的方法来获得默认构造函数(没有参数的构造函数)
(我知道@SupressWarning
注释会抑制此警告。)
只需将循环声明更改为
for (Map.Entry<String, Class<?>> entry : connectionRepository.entrySet()) {
出现此错误是因为使用了参数化的Class
作为原始类型。在这里,您可以阅读有关泛型和通配符的内容。您可以使用Class<?>
来避免此错误。但是仍然需要转换为CWSConnection
。您可以通过拥有Map<String, Class<CWSConnection>>
而不是Map<String, Class<?>>
来避免它。
方法
Class.newInstance()
调用类的默认构造函数。但我认为这对警告没有帮助,因为您的Class
仍然是一个原始类型。