Как избежать этой ошибки стирания в Java? - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть самодельный объект хранения, похожий на Set interface методы. Я хочу сделать его совместимым с Set, чтобы он мог быть совместим с Collection s. Проблема в том, что это универсальный c класс, и что универсальный c класс использует переменную типа в качестве параметров метода.

Два метода, о которых я говорю:

У меня есть:

remove(T var) {/*remove var*/}

Set interface имеет это:

remove(Object var) {/*remove var*/}

Компилятор сообщает мне, что существует какая-то ошибка стирания . Я могу изменить remove с remove(T var) на удаление (Object var), но я предпочитаю этого не делать.

Есть ли другой способ сделать это, чтобы сделать его совместимым с Set без изменения моя оригинальная подпись метода?

1 Ответ

1 голос
/ 28 февраля 2020

Причина, по которой он объявлен как (Object v), а не (T v), заключается в том, что он удаляет все объекты x, где v.equals(x) == true. Обратите внимание, что объекты разных классов можно сравнивать друг с другом, и для них совершенно законно быть равными, потому что equals не требует, чтобы объекты были одного и того же класса.

...