未检查的从X转换为扩展X的泛型类型

时间:2019-02-11 16:38:34

标签: java java-8 casting unchecked-cast unchecked-conversion

我的任务是在代码库中删除尽可能多的@SupressWarning,而我不确定如何解决此特定问题。

我有这个外部方法,它返回一个Serializable对象,以及一个通用类型T extends Serializable,我想将该对象转换为该类型。

这是代码的简化版本:

class A <T extends Serializable> {

    public T someMethod() {
        Serializable result = someExternalMethod(...);
        T convertedObject = (T) result; // produces unchecked cast warning

        return convertedObject;
    }
}

是否可以执行此转换而不会产生未经检查的强制转换警告(假设无法更改外部方法)?

这是 Java 8

2 个答案:

答案 0 :(得分:3)

要扩展ferpel的答案,您可以将类型作为参数传递

    class A <T extends Serializable> {

        public T someMethod(Class<T> type) {
            Serializable result = someExternalMethod(...);
            return type.cast(result);
        }
    }

答案 1 :(得分:0)

尝试将产生未经检查的强制转换警告的行替换为

T convertedObject = anyClassYouWant.cast(result);