尽管String实现了CharSequence,但Java不允许这样做。做出这个设计决定的原因是什么?
发布于 2011-08-19 02:23:19
不允许这样做的决定是因为它不是类型安全的:
public class MyEvilCharSequence implements CharSequence
{
// Code here
}
HashMap<CharSequence, CharSequence> map = new HashMap<String, String>();
map.put(new MyEvilCharSequence(), new MyEvilCharSequence()); 现在,我尝试在String映射中添加一个MyEvilCharSequence。大问题,因为MyEvilCharSequence肯定不是String。
但是,如果您说:
HashMap<? extends CharSequence, ? extends CharSequence> map = new HashMap<String, String>();这样就行了,因为编译器会阻止您向映射中添加非null项。这一行将产生编译时错误:
// Won't compile with the "? extends" map.
map.put(new MyEvilCharSequence(), new MyEvilCharSequence());See here,了解有关通用通配符的更多详细信息。
发布于 2011-08-19 02:21:32
应该是HashMap<? extends CharSequence, ? extends CharSequence>
https://stackoverflow.com/questions/7112142
复制相似问题