java - java中存储对象的数据集

标签 java android object data-structures

假设我有多个对象要存储:

Person ------------ Employee ------------ Sales Engineer       
  |                    |
Customer          Field Engineer

因此:人员、客户、员工、销售工程师、现场工程师。

我需要跟踪所有这些...存储它们的最佳方式是什么?在 ArrayList 中?自定义 ArrayList?

它们的存储方式也可能影响 future 的扩展——将来,这些对象可能由 SQL Server 的字段生成。 (此外,这是一个 Android 应用程序 - 所以这可能是一个因素。)

最佳答案

你需要一个 List<Person> .您的图表建议继承,因此您需要拥有父类(super class)的集合,让多态性完成其余的工作。

您的代码可以做到这一点:

List<Person> people = new ArrayList<Person>();
// Any class that extends person can be added
people.add(new Customer());
people.add(new FieldEngineer());
for (Person person : people) {
    System.out.println(person);
}

您表达的设计不允许工程师成为客户,或销售工程师进入现场,但在像您这样的情况下,这是继承的诅咒。

如果您需要灵 active ,更好的设计可能是保留 Person 类并以装饰器方式为 Person 分配角色。

装饰器会使用组合而不是继承来添加行为,如下所示:

public class Customer {

    private Person person;

    public Customer(Person p) { this.person = p; }

    public void buyIt() { // do something customer like here }
}

public class FieldEngineer {

    private Person person;

    public FieldEngineer(Person p) { this.person = p; }

    public void fixIt() { // do something field engineer like here }
}

关于java - java中存储对象的数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6552064/

相关文章:

C++ 在类中定义静态对象

java - NetBeans - Java EE 服务器类路径设置不正确 - 服务器主目录丢失错误

java - 在运行时强制静态变量初始化

android - Jetpack Compose Android TextField 超出宽度并插入右侧元素变得狭窄

Android ADB 从/data/data/com.xxx 复制到/sdcard

javascript - 为什么这些属性不可枚举?

symfony - 如何使用内部带有 @ 符号的 twig 对象变量

Java正则表达式匹配列表中的一个或多个字符

java - SWT View 中的视频 Swing JPanel

android - 在 Android OpenGL ES 中放大纹理?