0

我有一个具有以下方法的类:

public abstract class TypedMessage<T>{

    public TypedMessage<T> setBody(byte[] body) {
        this.body = body;
        return this;
    }

在一个子类中TypedMessage,我想重载这个方法。所以我做了以下事情:

public class ThriftMessage<T extends TBase> extends TypedMessage<T>{

    public TypedMessage<T> setBody(T body) {
        byte[] data = ThriftMessageUtils.messageBodyToByteArray(body);
        this.body = data;
        return this;
    }

T注意泛型的约束。它必须扩展TBase。这一切都编译得很好。现在,当我在这样声明的类中使用它时:

public abstract class CQSTask<CQSEvent extends TBase>{

    protected void sendCQS(CQSEvent cqsEvent) throws Exception{
        TypedMessage<CQSEvent> message = 
            new ThriftMessage<CQSEvent>(getCQSEventClass())
                .setBody(cqsEvent) //<---Compile error

setBody()引发编译错误。它试图参考:

public TypedMessage<T> setBody(byte[] body)

中方法的版本,TypedMessage而不是中的重载版本ThriftMessage

这很令人困惑,因为在我声明泛型参数的类中,我CQSEvent也有它扩展的约束TBase。谁能帮我理解为什么它不尝试引用重载版本?

更新:

这是错误消息

error: incompatible types: CQSEvent cannot be converted to byte[]
            .setBody(cqsEvent);
                     ^

其中 CQSEvent 是一个类型变量: CQSEvent 扩展了在类 CQSTask 中声明的 TBase

4

0 回答 0