【发布时间】:2017-06-27 14:04:12
【问题描述】:
我在 Java 中的类层次结构下面有这个
Class Container
{
private List<? extends Element> element;
public List<? extends Element> getElements()
{
return elements;
}
public void setElements(List<? extends Element> elements)
{
this.elements = elements;
}
}
MyElement extends Element
{
int a;
}
在我的 scala 服务中,我使用以下这些类 -
var elements: java.util.List[_ <: Element] = container getElements
elements match {
case null => elements = new ArrayList[MyElement]();
case _ => ;
}
//additional service code here,
//and then try to create an object and add it to the existing list of elements as below.
val element = new MyElement
//..... other prog logic..
elements.add(element)
将元素添加到列表时出现编译错误
我看到错误信息被列为 -
type mismatch; found : element.type (with underlying type com.vo.MyElement) required: _$7 where type _$7 <: com.vo.Element
有没有办法解决这个问题?为什么 Scala 编译器无法破译 MyElement 确实是 Element 的子类并且可以添加到主列表中。
真的希望有人帮助我。我已经尝试了几种替代方案,但我无法让它发挥作用。我错过了什么还是我真的很愚蠢?
谢谢, 阿达什
【问题讨论】:
-
这既不是 Java 也不是 Scala -
MyElement extends Element。同样地 -Class Container。Element是什么?container是什么?这是什么 -case _ => ;? -
你能解决这个问题并解释你想要做什么吗?
-
我认为引起编译错误的语句是
elements = new ArrayList[MyElement]()。 JavaList在泛型类型中是不变的:你怎么能将ArrayList<MyElement>分配给List<Element>?还是我错过了什么? -
@riccardo.cardin 这个问题有太多问题...我认为每一行都有问题。
-
@Adarsh 你确定你的 Java 代码部分没问题吗?