虽然 String 实现了 CharSequence,但 Java 不允许这样做。做出此设计决定的原因是什么?
最佳答案
之所以禁止这样做是因为它不是类型安全的:
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
项添加到 map 中。此行将产生编译时错误:
// Won't compile with the "? extends" map.
map.put(new MyEvilCharSequence(), new MyEvilCharSequence());
See here有关通用通配符的更多详细信息。
关于java - 为什么我不能将 HashMap<CharSequence,CharSequence> 设置为 HashMap<String,String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112142/