java - 如何实现对两个相同类的一个引用?

标签 java design-patterns

我有两个实现相同但名称不同的类。它们是生成的,我无法修改它们:

public class Foo {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class Bar {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

我需要用数据填充这些类,因为它们是相同的,所以我更愿意用单个类或引用来完成,然后根据需要转换为(或者希望解决方案更优雅)Foo 或 Bar。概念上:

FooOrBar fob = ????;   
fob.setName("XYZ");

Foo f = fob.(???);
Bar b = fob.(???);

我研究过泛型,但它似乎适用于当您真的不知道您将在哪个类上操作时。我是否有可能拥有某种类型的类或引用来实现这一点?

7 月 26 日编辑:

如果这样的跟进形式不好,我深表歉意,如果需要,我可以发布新的。我正在实现 Tomasz 的适配器模式,但我的最后一步与他的不同。我需要对接口(interface)对象进行条件分配。以下是我所拥有的,到目前为止我没有收到任何错误或警告,但我想知道这是否出于某种原因不是一个好的做法?也许我应该使用反射或泛型来确定接口(interface)的类?这将是一种只有我的代码会调用并且我会知道条件的方法。我搜索了条件接口(interface)分配,但搜索不多。

FooOrBar fob;  //interface

if (condition true) {

    fob = new FooAdapter();  //FooAdapter implements FooOrBar
} else {
    fob = new BarAdapter();  //BarAdapter implements FooOrBar
}

fob.setName("XYZ");

最佳答案

你要找的是并且在 Java 中不受支持。试试像 这样的动态语言和 .

在 Java 中,假设您不能修改 FooBar,您将需要一个 Adapter 模式。首先在 FooBar 上创建一个抽象:

public interface FooOrBar {
    String getName();
    void setName(String name);
}

并且有两个这样的适配器(BarAdapter 几乎相同):

public class FooAdapter implements FooOrBar {

    private final Foo foo;

    public FooAdapter(Foo foo) {
        this.foo = foo;
    }

    public String getName() {
        return foo.getName();
    }

    public void setName(String name) {
        foo.setName(name);
    }

}

现在你可以说:

FooOrBar fob = new FooAdapter(foo);
FooOrBar fob2 = new BarAdapter(bar);

fob.setName("XYZ");

我会把提取实际值留给你(你真的需要它吗?)

关于java - 如何实现对两个相同类的一个引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11655620/

相关文章:

java - Spring @Autowired 提供新实例而不是初始化的 session 作用域 bean

java - 如何停止 Netbeans 中正在运行的进程

java - 在java中传递泛型类类型

java - 如何使用 DateTimeFormatter 解析带冒号的偏移量?

java - 寻找商业智能数据处理的最佳实践

java - 为什么我的图像没有添加到我的 JButton 中?

c# - 实现提供者模式?

javascript - Promise Chain Breaks w/.all()

java - 生产者/消费者模式与观察者模式的区别

java - 调用 Jersey 服务 (PUT) 时发送电子邮件通知的设计问题