可能重复:
`List<Dog>` 是 `List<Animal>` 的子类吗?为什么 Java 的泛型不是隐式多态的?
我需要帮助了解发生了什么。
我有一个界面
public interface Foo {
Map<String, ParameterValue> getParameters();
}
public interface ParameterValue { }
以及 Foo 的一个实现。
class FooImpl implements Foo {
Map<String, ParameterValueImpl> parameters = new HashMap<String, ParameterValueImpl>();
//ParameterValueImpl an implementation of ParameterValue
@Override
public Map<String, ParameterValue> getParameters() {
return ((Map<String,ParameterValue>) parameters);
}
}
我收到以下错误
[ERROR] Failed to execute goal
failure [ERROR]
src/main/java/domainJPA/model/FooImpl.java:[92,45]
inconvertible types [ERROR] found :
java.util.Map<java.lang.String,domainJPA.model.ParameterValueImpl>
[ERROR] required:
java.util.Map<java.lang.String,domain.model.ParameterValue>
我必须在 Foo 的接口中使用 ParameterValue,而在 FooImpl 中我必须只实现 ParameterValue (ParameterValueImpl),因为它是 @Entity 并且 jpa 需要它。
我怎样才能使这段代码编译?
编辑
如果我将代码更改? extends ParameterValue
为答案之一中的建议,那么我将无法使用 Foo 接口。
以下代码导致编译错误:The method put(String, capture#8-of ? extends ParameterValue) in the type Map<String,capture#8-of ? extends ParameterValue> is not applicable for the arguments (String, ParameterValueImpl)
foo.getParameters().put("test", new ParameterValueImpl);