如何使用具体参数进行子类化

How to Subclassing with Concrete Parameters

我有一个class事务和一个服务接口

public class Transaction {}

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

现在我想子class 事务 class 并为服务接口 class 提供一个具体的 class

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 subclasses Transaction,我也没有覆盖超类型方法。

我该如何实现?

正如 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();
    }
}