【问题标题】:how to exclude a property from object while putting into hashmap in java在java中放入hashmap时如何从对象中排除属性
【发布时间】:2020-04-27 10:05:23
【问题描述】:

假设Employee 类具有三个属性。

class Employee {
    int id;
    String name;
    String team;

    public Employee(){
        this.id = id;
        this.name = name;
        this.team = team;
    }
}

我想在放入HashMap之前从对象中删除team。

Map<Integer, Employee> empMap = new HashMap<>();

Employee e1 = new Employee(100, "John", "Dev");
Employee e2 = new Employee(101, "Mary", "Dev");
Employee e3 = new Employee(103, "Andy", "QA");

empMap.put(e1.getId(), e1);
empMap.put(e2.getId(), e2);
empMap.put(e1.getId(), e3);

empMap 中的值不应包含 team 属性。创建新对象会起作用,但实时成本很高。有没有办法在不创建新对象的情况下实现这一点。

【问题讨论】:

  • empMap.put(e1.getId(), e1.setTeam(null));
  • “删除”实际上是什么意思?这是否意味着将属性值设置为null?
  • @Rami 实时对象将来自具有多个属性的不同来源,我只想保留少数属性,因为保留所有属性需要更多内存。并且设置 null 会导致错误,因为这些对象正在其他地方使用。

标签: java object collections hashmap maps


【解决方案1】:

正如您所提到的,一个选项是创建没有团队属性的新对象。另一种是使用外观

public class MapEmpFacade extends Employee {
  public MapEmpFacade(Employee emp) {
    //define all methods to return the method results from emp, except for getTeam
  }
  public int getTeam() { return null; } //override getTeam
}

【讨论】:

    【解决方案2】:

    您可以查看您的设计以确保您需要该属性。 您在map 中持有Employee 引用,team 属性在那里并且可能正确表示Employee ...您可以避免使用team 属性...或者您可能想要有一个Person 类。

    如果您使用某个框架中的这些实例来做某事(例如:序列化、持久性等),它可能应该提供一种方法来忽略/跳过对象中的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 2011-05-16
      • 1970-01-01
      • 2011-05-09
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多