【发布时间】:2018-03-02 15:38:23
【问题描述】:
我有一个对象,其中泛型T 的类型在某个时候通过一个巨大的接口链丢失了。我想知道是否可以使用函数通过检查类型来重新获得某种类型的安全性:
private T metaData; // type of T is lost
public <R> R getMetaData(Class<R> className) {
assert className.isInstance(metaData);
return (R) metaData;
}
但是,此实现会产生“未经检查的强制转换:'T' to 'R'”警告。是否有避免此警告的实现,或者是抑制它的唯一解决方案?
【问题讨论】:
-
基本上,
Class.cast是一个已经有@SuppressWarning 注解的方法。转换仍未检查。 -
这实际上有什么改善吗?你会得到一个断言错误而不是一个类转换异常,有什么大的区别?