Java 如何将对象添加到<;?扩展接口>;?

Java 如何将对象添加到<;?扩展接口>;?,java,object,generics,Java,Object,Generics,如果有映射:Map 如何将MyObj添加到此aMap 不能,因为键类型的上限 原因是?扩展一个可以是MyOtherObj实现一个。在这种情况下,将MyObj类型的密钥放入映射中是不安全的: public interface A { int getA(); } public class MyObj implements A { public int getA(){ return 1; } } 映射只能“使用”一个文本null: for (A a : aM

如果有映射:
Map
如何将
MyObj
添加到此
aMap

不能,因为键类型的上限

原因是
?扩展一个
可以是
MyOtherObj实现一个
。在这种情况下,将
MyObj
类型的密钥放入映射中是不安全的:

public interface A {
    int getA();
}

public class MyObj implements A {
    public int getA(){
        return 1;
    }
}
映射只能“使用”一个文本
null

for (A a : aMap.keySet()) { ... }
因为
null
可以毫无例外地转换为任何类型。但是在只有一个键的地图中没有多大用处——你也可以直接存储值

安全地执行此类型的唯一方法是通过您知道的接受
MyObj
实例的引用将
MyObj
实例放入映射中:

aMap.put(null, "");
Map safeMap=newhashmap();
safeMap.put(新的MyObj(),“”);

Map这是不可能的。你的编译器不允许这样做

您必须将地图更改为:

Map<A, String> safeMap = new HashMap<>();
safeMap.put(new MyObj(), "");

Map<? extends A, String> aMap = safeMap;

您需要更加连贯地详细说明,以便我们能够帮助您
java.util.Map
在两个对象上工作<代码>键
。您想如何使用MyObj
。。。。作为键或值?“我如何才能将MyObj添加到此aMap”您不能,除非您的键为
null
“您不能,除非您的键为null”如果他将其对象添加为key@degr不,你真的不能。真的真的。试试看。我会添加一个简单的建议,使用
地图
Map<MyObj, String> safeMap = new HashMap<>();
safeMap.put(new MyObj(), "");

Map<? extends A, String> aMap = safeMap;
Map<A, String> safeMap = new HashMap<>();
safeMap.put(new MyObj(), "");

Map<? extends A, String> aMap = safeMap;
Map<A, String> aMap = new HashMap<>();
aMap.put(new MyObj(), "myObject");