【发布时间】:2014-05-26 04:37:46
【问题描述】:
为什么在Class<?> 类上使用cast 方法会在编译时产生未经检查的警告?
如果您查看 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,不是吗?
【问题讨论】:
-
这不是您要投射的课程,而是
Object... -
对不起,我不明白。请考虑重新阅读问题。我添加了额外的背景。谢谢!
-
在第一个代码sn-p中,方法的参数是
Object;您需要在返回之前将其转换为正确的类型。 -
好的,但是...我还是不明白 :(。对不起。
标签: java generics casting effective-java