有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中将属性放入hashmap时如何从对象中排除属性

比如说,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属性。创建新对象会起作用,但实时性成本很高。有没有一种方法可以在不创建新对象的情况下实现这一点


共 (2) 个答案

  1. # 1 楼答案

    正如您所提到的,一个选项是在不使用team属性的情况下创建新对象。另一种是使用立面

    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. # 2 楼答案

    你可以检查你的设计,以确保你需要的财产存在。 您在map中持有Employee引用,team属性在那里,并且可能正确地表示了Employee。。。您可以避免使用team属性。。。或者你想拥有一个Person

    如果您使用某个框架中的这些实例来执行某些操作(例如:序列化、持久化等),那么它可能会提供一种忽略/跳过对象中某个属性的方法