У меня есть класс с именем MyClass, который использует аннотацию lombok @EqualsAndHashCode(of = { "id" })
. Идентификатор свойства имеет тип String. С этим я бы предположил, что когда у меня есть набор этих классов, то есть List<MyClass> classes
, и я вызываю метод .indexOf()
со строковым значением, равным id одного из объектов в коллекции. Я ожидаю, что он вернет индекс этого объекта, но он возвращает -1. Я думаю, что коллекции java не признают аннотации lombak? Есть идеи?lombok EqualsAndHashCode для List.indexOf()
ответ
Как уже писал Луис, Ваш 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. Но большую часть времени ваше решение является самым простым и лучшим, и вы, вероятно, не сможете измерить разницу в скорости.
- 1. Наследование Lombok с @EqualsAndHashCode
- 2. Lombok EqualsAndHashCode обработка дополнительных массивов
- 3. List.IndexOf возвращает 1 C#
- 4. Определить List.IndexOf игнорировать регистр
- 5. Lombok для Android
- 6. Предупреждение равно/hashCode в @Data аннотация lombok с наследованием
- 7. list.indexOf (численное значение) возвращает -1
- 8. Нечетный Java Hashcode (с Lombok) Неинтерминированное поведение
- 9. Пользовательские расширения Lombok требуют пакета Lombok?
- 10. Заблуждение для Android Studio - Lombok
- 11. факторизация аннотации Lombok в другую аннотацию, как в @Data
- 12. Lombok and Maven
- 13. Модульные тесты Java lombok для сборщиков getters
- 14. Lombok Как настроить getter для поля Boolean?
- 15. Почему Eclipse необходимо настроить для Lombok?
- 16. Maven Scope для Lombok (Компиляция против предоставленного)
- 17. lombok key уже зарегистрирован
- 18. Пользовательский сеттер через Lombok
- 19. Lombok messing up - intellij
- 20. lombok @AllArgsConstructor constructor
- 21. Openshift with lombok issue
- 22. Lombok + Eclipse Kepler
- 23. Lombok @ slf4j not logging
- 24. Lombok @NonNull vs Validate.notNull
- 25. Инициализация внутренней коллекции Lombok
- 26. Lombok and AspectJ
- 27. Project Lombok - Аннотации значений: можно ли подавить @Getter?
- 28. Lombok - @Singular аннотация не найден
- 29. Тестирование аннотаций Lombok с Junit
- 30. Spring jpa entity и Lombok
Выполняет ли ваш метод 'equals' [все свойства, которые он должен иметь] (https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals%28java .lang.Object% 29)? – immibis
Вам нужно вызвать indexOf в экземпляре MyClass ... – assylias
Ваш 'MyClass' не будет равен« String », как бы вы это ни делали. Не будет ярлыка, чтобы избежать цикла. –