Атрибуты коллекции Java POJO - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть POJO что-то вроде того, который указан ниже. Здесь я имею в виду Set атрибут коллекции в POJO1. Я понимаю, что набор не содержит дубликатов. Нужно ли переопределять equals() и hashCode() методы в POJO2? Использование Set здесь действительно не поможет, если мы не переопределим методы equals и hashCode? Пожалуйста, помогите мне немного больше понять этот контекст!

public class POJO1 {

        private String name;
        private Set<POJO2> pj2;

        public Company(){
            pj2 = new HashSet<>();
        }

        //setter and getter methods

    }

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Вам так нравится

import java.util.Set;

public class POJO1 {

    private String name;
    private Set<POJO2> pojo2;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<POJO2> getPojo2() {
        return pojo2;
    }

    public void setPojo2(Set<POJO2> pojo2) {
        this.pojo2 = pojo2;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        POJO1 pojo1 = (POJO1) o;

        if (name != null ? !name.equals(pojo1.name) : pojo1.name != null) return false;
        return pojo2 != null ? pojo2.equals(pojo1.pojo2) : pojo1.pojo2 == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + (pojo2 != null ? pojo2.hashCode() : 0);
        return result;
    }

}

Узнайте больше на https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)

0 голосов
/ 01 сентября 2018

Да, единственный способ для Java понять, какие объекты являются дубликатами, это вызвать метод equals(). Реализация по умолчанию equals() проверяет, что ссылки двух объектов указывают на одно и то же место в памяти.

Но в зависимости от точной реализации вашего Set вам может потребоваться переопределить hashCode/equals или реализовать Comparable интерфейс.

Поскольку вы помещаете объекты POJO2 в HashSet, вам необходимо проверить hashCode равно methods in POJO2` классу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...