关于java:为什么我不能设置HashMap< CharSequence,CharSequence>

Why can't I set HashMap<CharSequence,CharSequence> to HashMap<String,String>

虽然String实现了字符序列,但Java不允许这样做。这个设计决策的原因是什么?


决策机制是不允许的,因为这不是类型安全的: </P >

1
2
3
4
5
6
7
public class MyEvilCharSequence implements CharSequence
{
    // Code here
}

HashMap<CharSequence, CharSequence> map = new HashMap<String, String>();
map.put(new MyEvilCharSequence(), new MyEvilCharSequence());

现在我已经试过站A MyEvilCharSequence变成一个StringLSP。大的问题,因为MyEvilCharSequence是最definitely不是一个String。。。。。。。 </P >

然而,如果你所说的: </P >

1
HashMap<? extends CharSequence, ? extends CharSequence> map = new HashMap<String, String>();

然后那厂,因为编译器会防止你从增非nullitems的LSP。本线会产生一个编译时错误: </P >

1
2
// Won't compile with the"? extends" map.
map.put(new MyEvilCharSequence(), new MyEvilCharSequence());

在这里,看到更多的资料的方法是通用的通配符。 </P >


它应该是HashMap </P >