Метод Equals с приведением универсального параметризованного классаJAVA

Программисты JAVA общаются здесь
Anonymous
Метод Equals с приведением универсального параметризованного класса

Сообщение Anonymous »

Я использую Java 21.
Я пытаюсь написать метод равенства для MyClass, который определяет вложенный класс MyNested расширяет Comparable< /code> и метод getNested(), который возвращает экземпляр класса MyNested, который определен во время создания, и экземпляр MyClass.
Я не понимаю, как это сделать правильно.
Если да:

Код: Выделить всё

    @Override
public boolean equals(Object obj) {
if (this == obj) return true;
if ((obj == null) || (this.getClass() != obj.getClass())) return false;
MyClass other = (MyClass) obj;
return this.getNested().compareTo(other.getNested()) == 0;
}
Я получаю ошибку компиляции:

Код: Выделить всё

java: incompatible types: MyClass.MyNested cannot be converted to MyClass.MyNested
Это происходит потому, что методу MyNested.compareTo(...) нужен объект типа MyNested, но другой.getNested () возвращает объект типа MyNested.
Если да:

Код: Выделить всё

    @Override
public boolean equals(Object obj) {
if (this == obj) return true;
if ((obj == null) || (this.getClass() != obj.getClass())) return false;
MyClass other = (MyClass) obj;
return this.getNested().compareTo(other.getNested()) == 0;
}
Моя среда IDE жалуется:

Код: Выделить всё

Unchecked cast: 'java.lang.object' to 'MyClass'
которое я могу убрать, добавив

Код: Выделить всё

@SuppressWarnings("unchecked")
в строке перед приведением, но я не уверен, что это правильно, поскольку не верю, что this.getClass() != obj.getClass() проверка в предыдущей строке гарантирует, что общие типы одинаковы, только классы одинаковы.
Как правильно написать метод равенства в этом случае?
Как правильно написать метод равенства в этом случае?
Как правильно написать метод равенства?
п>

Подробнее здесь: https://stackoverflow.com/questions/785 ... ized-class

Вернуться в «JAVA»