当前位置: 首页 > 知识库问答 >
问题:

在java中为两个不同的对象创建一个封闭类

赵嘉悦
2023-03-14
public class Object1 {

    ...
    private String name;
    private String description;
    ...

    Object1 () {

    }

    public String getName() {
        return name;
    }

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

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

public class Object2 {

    ...
    private String name;
    private String description;
    ...

    Object2 () {

    }

    public String getName() {
        return name;
    }

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

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

显然,在示例中,我将它们设置为字符串属性,但实际上它们是其他类型的。

注意:Object1和Object2实际上是从SOAP服务器所需的XML模型生成的类。所以我不能修改它们。

在我的代码中,我必须访问Object1或Object2的'name'属性,这取决于不同的因素。这个点是一个事件处理程序,所以在某一时刻,它捕获一个用Object1调用的事件,而在其他时间,它捕获一个用Object2调用的事件。

我的猜测是创建一个包含这两种类型的类,并公开一个“name”属性和一个“description”属性。

这样做的标准方法是什么?

共有1个答案

曹建华
2023-03-14

基本上有两种方法可以做到这一点:

>

  • 使用公开getter和setter的公共接口。然后让两个类实现该接口并让处理程序使用它。

    如果可能的话(这两个对象都没有扩展其他超类),您可以使用一个抽象超类,并将属性以及getter和setter放在那里。然后处理程序使用该超类。

    interface Common { 
      String getName();
    }
    
    abstract class CommonAdapter implements Common {
       String name;
    
       String getName() {
         return name;
       }
    
       //setter as well
    }
    
    //just extend the adapter and enjoy
    class Object1 extends CommonAdapter {
      //specific code for Object1
    }
    
    //extending not possible, so implement the interface directly
    class Object2 extends SomeOtherClass implements Common {
      String name;
    
      String getName() {
        return name;
      }
    }
    
    class Handler {
      void handle( Common c ) {
        c.getName();
        ...
      }
    }
    
    class Object1CommonWrapper implements Common {
      Object1 delegate;
    
      String getName() {
        return delegate.getName();
      }
    }
    

  •  类似资料:
    • 你知道如何在创建备用本地回购时获得这些缺失的比特吗?提前感谢!

    • 使用saveOrUpdate创建新的ebject时,hibernate将对象存储在数据库中并正确返回。但在方法的同一调用中创建了一个带有一些空列的附加对象。 数据库中的对象如下所示: 这是数据类: 这是我将对象存储到数据库的方式:public class DataUtils{private Session Session;private static DataUtils DataUtils; 和我

    • 所以,我遇到了这样的情况 我有一个Restful控制器方法,它返回一个对象 需要你们的建议伙计们。这是在编写更多代码和节省内存之间进行权衡吗?解决这一问题的最佳方法是什么?

    • 我有一个Card类,它包含两个构造函数,你可以在下面的代码中看到。问题是,每个卡片对象包含2个字符串和2个图像,因为我想保存这些对象,所以我必须将图像的路径保存为字符串,然后检索它们,因此需要2个构造函数。然而,使用一些打印语句,我发现每当检索到一张卡片时,就会创建两个独立的对象:一个正常的对象和另一个空的对象。我知道这是因为我在第二张卡中使用第一个构造器创建了一张新卡。有没有办法避免这样的情况,

    • 我对编程有点陌生,我被卡住了。假设我在一个项目中有五个不同的类:foo1、foo2、foo3、foo4和foo5,它们都做不同但相似的事情。现在假设我需要为每个对象创建一个新对象,比如:foo1 bar1=new foo1();foo2 bar2=新的foo2();foo3 bar3=新的foo3();等等当然这是可行的,但如果我能在一个for循环中实例化我需要的所有对象,或者至少把我想要创建的所

    • 问题内容: 我想知道如果在同一个对象上同步两次,在Java中是否会出现任何奇怪的行为? 场景如下 两种方法都使用该对象并对其进行同步。当第一个方法调用第二个方法时,它会被锁定而停止吗? 我不这么认为,因为它是同一个线程,但是我不确定是否可能会出现其他任何奇怪的结果。 问题答案: 同步块使用 可重入 锁,这意味着如果线程已经持有该锁,则它可以重新获取它而不会出现问题。因此,您的代码将按预期工作。 请