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

500服务器错误

我遇到一个问题,我自己找不到正确的解决方法。

基本上,我有两个对象Object1Object2,它们都具有相同类型的两个属性:

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. 使用公开获取器和设置器的公共接口。然后,让两个类都实现该接口,并让处理程序使用它。

  2. 如果可能的话(两个对象都尚未扩展其他超类),您可以使用抽象超类并将属性以及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();
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果在其他两个类中不存在新对象,如何在Python Django中创建一个新对象?

匹配两个不同的数组并在python中创建一个新数组

合并Java中的两个对象列表以使用Jackson创建一个Json

为CSS中两个不同的闪烁类创建两种不同的样式

为具有不同列的两个表创建一个选择查询

使用ggplot为数据帧的两个不同列创建一个boxplot

React为两个不同的图标创建一个样式化的组件?

结合两个json数组作为mysql中的键值并创建一个json对象

使用JavaScript中的循环从一个对象创建两个对象时出错

要在一个休眠条件中添加两个不同的表(类)

java:从两个构造函数创建一个对象

为两个控制器和两个模型类创建一个视图页面?

一个类可以为Java中的两个不同线程提供两个运行方法吗?

如何创建一个类的两个对象(实例),以及如何使用其函数f()的两种不同方式?

Robot Framework从类中创建两个实例,而不是一个

创建两个ForeignKey到一个类

javafx:如何创建一个考虑对象中两个属性的cellFactory?

在一个控制器中为两个不同的表创建记录是否被认为是不好的做法?

从两个不同数组中的对象创建对象

Java使用一个接口在两个类中实现不同的方法

compareTo() 在两个不同的类中,一个无法访问

Laravel 如何从两个分离的集合中创建一个对象?

如何在同一个类中创建两个不同的构造函数 - Android

使用字典中的两个对象创建一个嵌套对象

从同一个类中获取两个移动的对象进行交互(pygame)

如果对象中存在两个键或只有一个键,则逻辑不同?

jq - 从两个 JSON 文件的键值中的差异创建一个新对象

从vanilla JS中的两个对象数组创建一个新的对象数组

如何从两个非对称数组中创建一个对象数组?