首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复此未经检查的外派警告?

如何修复此未经检查的外派警告?
EN

Stack Overflow用户
提问于 2020-06-09 15:09:32
回答 1查看 121关注 0票数 1
代码语言:javascript
复制
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);警告,但我想不出如何在不压制它的情况下修复它。

ReflectionHelper.getClasses是获取包名中所有类的静态方法,其返回类型为Class[]Block是一个接口。RuntimeTypeAdapterFactory是gson中的一个额外类,它的源代码可以查看这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-09 16:11:24

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

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

代码语言:javascript
复制
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的类型

代码语言:javascript
复制
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));
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62285756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档