我有一个这样的课程:
public abstract class SomeClass<E extends AnotherClass> {
private E someVariable;
public E formatVariable(){
E formatted = someVariable.format(); //format is a method in AnotherClass, which returns AnotherClass
return formatted;
}
}
Eclipse给了我一个错误,它“无法从AnotherClass转换为E”
我感到很困惑,因为在课程中,我做了它,以便E是AnotherClass或它的子类,或者至少那是我对它的理解。
这里发生了什么,我该如何解决这个错误?
答案 0 :(得分:1)
format()
会返回AnotherClass
,但您并不想要任何 AnotherClass - 您需要专门的E
。如果你有这个怎么办?
public class AnotherClassRed extends AnotherClass {
@Override
public AnotherClass format() {
return new AnotherClassBlack();
}
}
public class AnotherClassBlack extends AnotherClass {
// Note: This is *not* a subclass of AnotherClassRed
...
在这种情况下,如果编译的东西然后formatVariable()
将格式化的实例作为AnotherClassRed返回,但实例实际上是AnotherClassBlack;结果将是ClassCastException。
听起来您希望format()
返回E
,而不是AnotherClass
。