java 反射:避免警告未经检查的调用 getConstructor(Class<?>...) 作为原始类型类的成员



我已经阅读了这篇文章

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仍然是一个原始类型。

相关内容

  • 没有找到相关文章

最新更新