我正在尝试创建一种服务定位器类,其中有一个Map<Integer, ? extends ISomething>
但是我以后不能myMap.put(0x00, new SomethingImplementor())
当我得到一个Error:(18, 33) java: incompatible types: org.sample.SomethingImplementor cannot be converted to capture#1 of ? extends ISomething
我的类(class)结构如下:
public interface ISomething {
public void doSomething();
}
public class SomethingImplementor implements ISomething {
@Override public void doSomething() {...}
}
为什么不能创建此映射并将值放入其中?
最佳答案
您根本不需要通配符。
您可以直接使用
Map<Integer, ISomething>
并且您可以实现
ISomething
的每个子类。无论如何,在这种情况下要使用通配符,您应该使用
super
。使用extends
,您不知道它将是什么类型,因此您无法在 map 上添加任何内容。通配符:http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html