向对象添加外部属性

时间:2015-10-23 14:16:39

标签: java

Noob Java问题在这里。我想知道是否有一种标准方法可以为POJO添加额外/外部属性。也就是说,我在我的程序中添加了一个User对象ArrayList。此对象将包含与我的数据库中定义的内容相对应的名称,姓氏,地址,电子邮件,电话等内容。

现在说我需要包含外部属性以及所述User,例如雇主ID,车牌#,智能手机类型。在向我的ArrayList添加User时,我需要能够包含这些额外的属性 - 是否可以使用Java严格附加这些属性以便我可以访问它们?

我想过要使用像Value Object这样的东西,其中VO将包含所有User属性以及要从外部类添加的额外字段,但是想要探索更多可能性。有任何想法吗?非常感谢

2 个答案:

答案 0 :(得分:1)

你有很多可能性。以下是一些让人想起的东西:

  1. 重构User类。这是显而易见的,所以我认为你有充分的理由不这样做。
  2. 编写一个扩展User的类,其中包含此信息。假设您只是为此信息适用的用户子集存储此信息,这是最有意义的。
  3. 使用合成 - 创建一个新类,用于保存用户实例,然后创建要添加到其中的任何其他信息。

答案 1 :(得分:1)

对您使用的设计产生的一个重大影响是,所有其他值是否都是唯一的,或者User是否可以拥有多个智能手机,车辆等。

如果所有其他字段都是唯一的,您只需在java.util.Properties(或其他地图)中滑动即可。您的User课程至少需要

import java.util.Properties;

class User
{
   Properties extra_attr = new Properties();

   // ... existing code ...

   public void setExtraAttr(String field, String value) {
       extra_attr.setProperty(field,value);
   }

   public String getExtraAttr(String field) {
       return extra_attr.getProperty(field);
   }
}

然后使用some_user.setExtraAttr("Employer ID","314159");some_user.getExtraAttr("Employer ID");等来设置和获取额外属性。

如果您需要多重性,则可能需要采用不同的方法,或者只需对Properties的实施进行编码即可。例如,您可以重写setExtraAttr()以查找现有密钥并添加索引

  public void setExtraAttr(String field, String value) {
      if(extra_attr.getProperty(field) == null)
         extra_attr.setProperty(field,value);
      else {
         int index = 1;
         while(extra_attr.getProperty(field+index) != null)
            index++;
         extra_attr.setProperty(field+index,value);
      }
  }

然后你需要某种循环来获取寻找和处理多个额外记录的属性。