1

我有一个类 Transaction 和一个 Service 接口

public class Transaction {}

public interface RequestService {
    public String getRequest(Transaction transaction);
}

现在我想继承事务类并为服务接口创建一个具体类

public class ESPTransaction extends Transaction {}

public class ESPRequestService implements RequestService {
    @Override
    public String getRequest(ESPTransaction espTransaction) {
        StringBuffer buff = new StringBuffer(espTransaction.someMethodThatDoesntExistInParentClass());
        return buff.toString();
    }
}

IDE 抱怨说,即使 ESPTransaction 是 Transaction 的子类,我也没有覆盖超类型方法。

我该如何实施?

4

1 回答 1

2

正如 IDE 所指出的,ESPRequestService没有正确实现RequestService,因为它没有getRequest(Transaction)方法。

一个巧妙的解决方案是使接口通用,因此每个RequestService实现都可以指定Transaction它期望的类型:

public interface RequestService<T extends Transaction> {
    public String getRequest(T transaction);
}

public class ESPRequestService implements RequestService<ESPTransaction> {
    @Override
    public String getRequest(ESPTransaction espTransaction) {
        StringBuffer buff = new StringBuffer(espTransaction.someMethodThatDoesntExistInParentClass());
        return buff.toString();
    }
}
于 2017-11-23T18:16:41.433 回答