2014-12-08 4 views
0

У меня есть класс с именем MyClass, который использует аннотацию lombok @EqualsAndHashCode(of = { "id" }). Идентификатор свойства имеет тип String. С этим я бы предположил, что когда у меня есть набор этих классов, то есть List<MyClass> classes, и я вызываю метод .indexOf() со строковым значением, равным id одного из объектов в коллекции. Я ожидаю, что он вернет индекс этого объекта, но он возвращает -1. Я думаю, что коллекции java не признают аннотации lombak? Есть идеи?lombok EqualsAndHashCode для List.indexOf()

+0

Выполняет ли ваш метод 'equals' [все свойства, которые он должен иметь] (https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals%28java .lang.Object% 29)? – immibis

+2

Вам нужно вызвать indexOf в экземпляре MyClass ... – assylias

+1

Ваш 'MyClass' не будет равен« String », как бы вы это ни делали. Не будет ярлыка, чтобы избежать цикла. –

ответ

1

Как уже писал Луис, Ваш MyClass не будет равен строкам, как бы вы это ни делали. Не будет ярлыка, чтобы избежать цикла.

Почему? String ничего не знает о MyClass, поэтому ему никогда не будет equals.

Правильные равные должны быть симметричными, и Ломбок делает это правильно, поэтому MyClass никогда не будет equals любым String. Вы можете сделать свой собственный сломанный equals, но это очень глупая идея.

Я думаю, что коллекции java не признают аннотации lombak?

Это не так, как это работает. Ломбок модифицирует AST, как если бы вы написали код, включая шаблон. Вы даже можете посмотреть на него, используя Деломбок. Guava видит только сгенерированный скомпилированный код, поэтому ничего не узнавать.

Я мог бы сделать это, добавив конструктор MyClass (String id) {this.id = id; }, а затем вызов classes.indexOf (новый MyClass («123»)). Это может быть неэффективно, но работает

Да, так оно и есть. Вы также можете написать свой собственный цикл или использовать предикат Guava или некоторую функцию Java 8. Но большую часть времени ваше решение является самым простым и лучшим, и вы, вероятно, не сможете измерить разницу в скорости.

Смежные вопросы