как исключить свойство из объекта при помещении в hashmap в java - PullRequest
0 голосов
/ 09 января 2020

Допустим, класс Employee имеет три свойства.

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

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

Я хочу удалить team из объекта, прежде чем поместить в HashMap.

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 ]

0 голосов
/ 09 января 2020

Вы можете пересмотреть свой дизайн, чтобы убедиться, что вам нужна собственность, чтобы быть там. У вас есть Employee ссылки в map, свойство team присутствует и, вероятно, правильно представляет Employee ... вы можете просто избежать использования свойства team ... или, возможно, вы захотите иметь класс Person.

Если вы используете эти экземпляры из некоторого фреймворка для каких-либо действий (например, сериализация, постоянство и т. д. c), это, вероятно, должно обеспечить способ игнорировать / пропускать свойство в ваш объект.

0 голосов
/ 09 января 2020

Один из вариантов, как вы упомянули, - это создание новых объектов без свойства 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
}
...