我需要帮助了解最新情况.
我有一个界面
public interface Foo {
Map<String, ParameterValue> getParameters();
}
public interface ParameterValue { }
Run Code Online (Sandbox Code Playgroud)
并实现了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);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
[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>
Run Code Online (Sandbox Code Playgroud)
我必须在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);
想一想 - 如果返回值getParameters()
实际上是a Map<String, ParameterValueImpl>
,那么你就可以向地图中添加一个值ParameterValue
,但不是ParameterValueImpl
.这样做会打破类型安全.
您有两种方法可以解决此问题:
getParameters()
,将地图复制到正确类型的新地图.Map<String, ParameterValue>
作为类型FooImpl.parameters
.您可以将界面方法更改为: -
Map<String, ? extends ParameterValue> getParameters();
Run Code Online (Sandbox Code Playgroud)
现在,您可以返回String
实现您的地图和任何类型的地图ParameterValue
那么你不需要在实现这个方法时需要一个类型转换.
public Map<String, ? extends ParameterValue> getParameters() {
return parameters;
}
Run Code Online (Sandbox Code Playgroud)
或者,由于您可以ParameterValueImpl
在ParameterType
引用中存储类型实例,因此,您还可以Map
将FooImpl
类更改为: -
Map<String, ParameterValue> parameters = new HashMap<String, ParameterValue>();
Run Code Online (Sandbox Code Playgroud)
然后你的原始方法将起作用.
归档时间: |
|
查看次数: |
4496 次 |
最近记录: |