我正在尝试创建一种服务定位器类,其中有一个
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

10-04 12:22