繁体   English   中英

如何解决这个未经检查的分配警告?

[英]How to fix this unchecked assignment warning?

var blks = ReflectionHelper.getClasses("PACKAGE_NAME");
var blockRta = RuntimeTypeAdapterFactory.of(Block.class);
for (var c : blks) {
    if (Block.class.isAssignableFrom(c)) {
        blockRta.registerSubtype(c);
    }
}

我收到Warning:(31, 46) Unchecked assignment: 'java.lang.Class' to 'java.lang.Class<? extends PACKAGE_NAME.Block>' blockRta.registerSubtype(c);Warning:(31, 46) Unchecked assignment: 'java.lang.Class' to 'java.lang.Class<? extends PACKAGE_NAME.Block>'警告; ,但我不知道如何在不压制它的情况下解决这个问题。

ReflectionHelper.getClasses是一个 static 方法,用于获取该 package 名称中的所有类,其返回类型为Class[] Block是一个接口。 RuntimeTypeAdapterFactory是 gson extra 中的一个 class,其源代码可以在这里查看。

由于ReflectionHelper.getClasses返回原始类型Class的数组,因此局部变量类型推断将使用此原始类型Class[]用于var blks blks,反过来,原始类型Class用于var c 将原始类型Class用于c允许将其传递给registerSubtype(Class<? extends Block>) ,无需任何检查,但并非没有任何警告。 您可以使用asSubclass方法进行检查转换,但您必须声明一个显式的非原始变量类型,以摆脱原始类型,否则,即使asSubclass调用的结果也会被擦除为原始类型由编译器。

有两种方法。 更改blks的类型:

Class<?>[] blks = ReflectionHelper.getClasses("PACKAGE_NAME");
var blockRta = RuntimeTypeAdapterFactory.of(Block.class);
for(var c: blks) {
    if (Block.class.isAssignableFrom(c)) {
        blockRta.registerSubtype(c.asSubclass(Block.class));
    }
}

然后, var c的类型自动更改为Class<?>

或者只是更改c的类型:

var blks = ReflectionHelper.getClasses("PACKAGE_NAME");
var blockRta = RuntimeTypeAdapterFactory.of(Block.class);
for(Class<?> c: blks) {
    if (Block.class.isAssignableFrom(c)) {
        blockRta.registerSubtype(c.asSubclass(Block.class));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM