Java 为什么可以';设置HashMap<;CharSequence,CharSequence>;到HashMap<;字符串,字符串>;

Java 为什么可以';设置HashMap<;CharSequence,CharSequence>;到HashMap<;字符串,字符串>;,java,generics,Java,Generics,虽然String实现了CharSequence,但Java不允许这样做。这个设计决定的原因是什么?应该是HashMap因为它不是类型安全的,所以不允许这样做的决定: public class MyEvilCharSequence implements CharSequence { // Code here } HashMap<CharSequence, CharSequence> map = new HashMap<String, String>(); map.

虽然String实现了CharSequence,但Java不允许这样做。这个设计决定的原因是什么?

应该是
HashMap因为它不是类型安全的,所以不允许这样做的决定:

public class MyEvilCharSequence implements CharSequence
{
    // Code here
}

HashMap<CharSequence, CharSequence> map = new HashMap<String, String>();
map.put(new MyEvilCharSequence(), new MyEvilCharSequence()); 
这样就行了,因为编译器将阻止您向映射添加非
null
项。此行将产生编译时错误:

// Won't compile with the "? extends" map.
map.put(new MyEvilCharSequence(), new MyEvilCharSequence());
有关通用通配符的更多详细信息。

的可能重复项
// Won't compile with the "? extends" map.
map.put(new MyEvilCharSequence(), new MyEvilCharSequence());