为什么cast
在类上使用该方法Class<?>
会在编译时产生未经检查的警告?
如果您查看 cast 方法,您会发现以下代码:
public T cast(Object obj)
{
if (obj != null && !isInstance(obj))
throw new ClassCastException(cannotCastMsg(obj));
return (T) obj; // you can see there is a generic cast performed here
}
如果我进行泛型转换,编译器会抱怨说有unchecked warning
.
其他背景信息
您可以在 Book Effective Java 2 版第 166 页(pdf 的)中找到我如何解决这个问题的示例。
作者写了这段代码
public <T> T getFavorite(Class<T> type)
{
return type.cast(favorites.get(type));
}
对比
public <T> T getFavorite(Class<T> type)
{
return (T) (favorites.get(type));
}
我只是不明白为什么编译器会抱怨未经检查的警告。最后,两段代码都进行了显式强制转换(T) object
,不是吗?