重複の可能性:
`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では、@ Entityとjpaが必要とするため、ParameterValue(ParameterValueImpl)の実装のみを行う必要があります。
このコードをコンパイルするにはどうすればよいですか?
編集
回答の1つで提案されているようにコードを変更すると? 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);