解决特殊的'未经检查的演员'警告

时间:2018-03-02 15:38:23

标签: java generics

我有一个对象,其中泛型T的类型在某个时刻通过巨大的接口链丢失。我想知道是否可以通过检查类型来使用函数来重新获得某种类型的安全性:

private T metaData; // type of T is lost
public <R> R getMetaData(Class<R> className) {
    assert className.isInstance(metaData);
    return (R) metaData;
}

但是,此实现会产生“未经检查的强制转换:'T'到'R'”警告。是否存在避免此警告的实现,或者是抑制它的唯一解决方案?

1 个答案:

答案 0 :(得分:7)

您不必使用R转换为(),而是可以直接使用Class。像,

return className.cast(metaData);

这里不会引起任何警告。