【发布时间】:2016-06-27 22:13:15
【问题描述】:
我正在学习 Java,目前正在阅读 Joshua Bloch 的 Effective Java。
在第 29 条中,他讨论了 Map 的参数化类型键以创建类型安全的异构映射。代码如下:
class Favorites {
private Map<Class<?>, Object> favorites = new HashMap<Class<?>, Object>();
public <T> void putFavorite(Class<T> type, T instance) {
if (type == null)
throw new NullPointerException("Type is null");
favorites.put(type, instance);
}
public <T> T getFavorite(Class<T> type) {
return type.cast(favorites.get(type));
}
}
他接着说
恶意客户端很容易破坏收藏夹的类型安全 例如,只需使用原始形式的 Class 对象。但是 生成的客户端代码在运行时会生成未经检查的警告 编译。
我知道Class<T> 将被删除为 Class。但我不确定恶意客户端如何在编译时破坏类型安全。我尝试了各种方法,但正如我所料,我总是遇到编译器错误。
谁能告诉我上面引用的那句话中 Joshua Bloch 到底是什么意思?
【问题讨论】:
标签: java generics type-safety raw-types