尽管String实现了CharSequence,但Java不允许这样做。这个设计决定的原因是什么?
答案 0 :(得分:6)
决定不允许这样做是因为它不是类型安全的:
public class MyEvilCharSequence implements CharSequence
{
// Code here
}
HashMap<CharSequence, CharSequence> map = new HashMap<String, String>();
map.put(new MyEvilCharSequence(), new MyEvilCharSequence());
现在我尝试将MyEvilCharSequence
放入String
地图中。很大的问题,因为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了解有关通用通配符的更多详细信息。
答案 1 :(得分:2)
应为HashMap<? extends CharSequence, ? extends CharSequence>