覆盖泛型

时间:2016-02-02 10:42:46

标签: java generics override abstract-class

考虑以下抽象类

public abstract class AbstractAssembler {

    public abstract <T extends AbstractValue> void transform(T value);

}

以及以下扩展名:

public class MyAssembler extends AbstractAssembler {

    @Override
    public void transform(MyValue value) {
        // ...
    }

}

使用MyValue

public class MyValue extends AbstractValue {

    // ...

}
Eclipse告诉我: MyAssembler类型的方法transform(MyValue)必须覆盖或实现超类型方法

为什么这不起作用?

1 个答案:

答案 0 :(得分:5)

您的transform()方法必须覆盖超类中的通用抽象transform()方法,即您应该具有以下内容:

public class MyAssembler extends AbstractAssembler {

    @Override
    public <T extends AbstractValue> void transform(T value) {

    }
}

如果你想用实际类型(例如MyValue)调用它,你应该这样做:

MyValue value = new MyValue();
new MyAssembler().transfer(value);

显式指定type-parameter(new MyAssembler().<MyValue>transfer(value);)是可选的,因为它将由编译器推断。

如果您希望MyAssember的{​​{1}}方法仅使用transform ,那么您应该这样做:

MyValue