2016-08-19 5 views
12

Мне действительно нравится функция проекта lombok, которая избавляется от кода шаблона. Мой старший предложил мне, что ломбок, похоже, использует отражение, чтобы уменьшить код шаблона, и однажды я услышал, что использование эффекта отражения. У меня вопрос, есть ли проблемы с использованием проекта lombok?Может ли ломбок снизить производительность?

ответ

19

Ломбок не использует отражение во время выполнения. Он подключается к внутренним компонентам компилятора и добавляет код в классы во время компиляции, который затем компилируется в обычном режиме.

6

@chrylis ответ правильный, но будьте осторожны с графом объектов (@Data и @ToString аннотация), например.

@Data 
public class A { 
    private B b; 
} 

@Data 
public class B { 
    private A a; 
} 

Lombok создаст toString с бесконечной рекурсией внутри. Вы должны использовать что-то вроде @ToString(exclude = {"a"}) внутри класса B

+3

Правильно, но обратите внимание, что это довольно нормально. Коллекции Java и Guava ведут себя одинаково, а также 'Arrays.toString (Object)'. Мало того, что мог сделать ломбок, поскольку он не генерирует каждую реализацию 'toString'. – maaartinus

+0

Но у меня нет каких-либо коллекций в моем примере. Результат по умолчанию toString выглядит как «[email protected]». Таким образом, нет рекурсии. Более того, аннотация @Data lombok может создать неэффективную реализацию методов «hashCode» и «equals». PS Я доволен lombok и по-прежнему рекомендую использовать его – sibnick

+0

Хорошо, у вас нет коллекций, но у вас может быть какой-то объект с рукописным 'toString'. В зависимости от его реализации вам нужно исключить поле или нет. Ломбок мог справиться с этим, отслеживая все свои вызовы 'toString' в' ThreadLocal ', но это замедлит все вызовы. Это может быть полезной функцией, но вряд ли кто-то ее попросил. +++ Почему неэффективный 'hashCode' /' equals'? Из-за того, что они обрабатывают массивы так же, как Java, как списки? PS: Я очень доволен Lombok (я считаю, что это больше, чем функции Java 8). – maaartinus

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