使用扩展类的泛型

时间:2016-04-21 23:59:01

标签: java generics

我有一个这样的课程:

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或它的子类,或者至少那是我对它的理解。

这里发生了什么,我该如何解决这个错误?

1 个答案:

答案 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