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");