gpt4 book ai didi

java - 泛型中的不可转换类型

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:40:47 26 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Is `List<Dog>` a subclass of `List<Animal>`? Why aren’t Java’s generics implicitly polymorphic?

我需要帮助了解发生了什么。

我有一个界面

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 的接口(interface)中使用 ParameterValue,而在 FooImpl 中我必须只实现 ParameterValue (ParameterValueImpl),因为它是一个 @Entity 并且 jpa 需要它。

我怎样才能编译这段代码?

编辑

如果我将代码更改为 ? extends ParameterValue正如其中一个答案所建议的,那么我就不能使用 Foo 接口(interface)。

以下代码导致编译错误: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);

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com