java - 如何围绕已经存在但不能在java中修改的类创建接口(interface)

标签 java oop interface class-design object-oriented-analysis

假设我的代码中已经有 2 个类:

class SomeOrder {
  String getOrderId() { return orderId; }
}

class AnotherOrder {
  String getOrderId() { return orderId; }
}

如何围绕这两个类创建接口(interface):

interface Order {
    String getOrderId();
}

理想情况下,我会修改代码,以便 SomOrder 实现 OrderAnotherOrder 实现 Order 但这里的问题是它们属于我无法控制或编辑的包(即它们来自外部 jar )。

我的算法目前看起来是这样的:

void sorter(List<SomeOrder> orders) {
    ... <custom sort logic> ...
    someOrder.getOrderId();
}

void sorter(List<AnotherOrder> orders) {
    ... <custom sort logic> ...
    someOrder.getOrderId();
}

使用单一界面我可以写:

void sorter(List<Order> orders) {
        ... <custom sort logic> ...
        order.getOrderId();
}

最佳答案

您可以使用适配器类:

class SomeOrderAdapter implements Order {
    private SomeOrder delegate;

    @Override
    public String getOrderId() {
        return delegate.getOrderId();
    }
}

AnotherOrder 类似。

关于java - 如何围绕已经存在但不能在java中修改的类创建接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49947749/

相关文章:

python - 您可以在第一次访问对象属性时对其进行初始化吗?

iOS UI 没有显示它应该在的位置

java - Liferay 7 - 用于单个博客项目的 ADT

java - Spring 示例应用程序

Javascript - 可以模拟经典的 OOP 继承吗?

angular - Typescript 接口(interface)中带有可选项目的固定长度数组

c++ - 如何将实现链接到另一个库的接口(interface)?

java - 在 JList 中有一个预选选项

java - 使用 APISpark reSTLet 扩展限制对 ReSTLet 资源的请求

java - 是否有可变公共(public)字段的用例?