2015-07-28 2 views
22

У меня есть класс, называемый Address, который выглядит следующим образом:Дополнительно в Ломбках

@Value 
class Address { 

    @NotNull String userId; 
    @NotNull String line1; 
    String line2; 

    private Address(Builder b) { 
     // copy everything from builder 
    } 

    // override getter for line2 so that it returns Optional<String> 
    public Optional<String> getLine2() { 
     return Optional.fromNullable(this.line2); 
    } 

    // and a Builder 
    public static class Builder { 
    // builder methods 
    } 
} 

Здесь я вынужден написать Builder и Getter, потому что, если я хочу, чтобы вернуться Факультативным при использовании Ломбок, у меня будет объявить line2 как Optional<String>. И это будет генерировать метод построения, который принимает Optional<String>!

Есть ли другой способ использовать ломбок с Optional?

ответ

9

Ответ отрицательный, и он, вероятно, никогда не будет.

Возможно, вы ошибаетесь :-) Optional не является заменой null и не является причудливым способом предотвращения NullPointerException. Это означает, что вопрос неопровержимо, например: каков средний возраст пустого списка лиц.

Optional s никогда не должен передаваться, но как только это возможно, будет отменен код вызова.

Смотрите также https://www.voxxed.com/blog/2015/01/embracing-void-6-refined-tricks-dealing-nulls-java/

Поскольку эти сценарии лишь несколько, и Ломбок любит, чтобы позволить программистам лучше писать код, я не ожидаю, что когда-либо будет его поддержка в Ломбок.

Раскрытие информации: Я являюсь разработчиком Lombok.

+13

Я действительно ценю, что вы отвечаете на этот вопрос! Благодаря! Я знаю об этой философии, не использующей 'Факультативный' в качестве замены' null'. И это будет использовать «Необязательно», если оно используется в геттерах. Но тогда есть еще одна, более удобная, философия разработчиков Google Guava, которая позволяет использовать опцию для замены null [необязательный вариант Guava] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google /common/base/Optional.html) Итак, я лично считаю, что 'lombok' shld остался нейтральным и обеспечил поддержку autoOptional и оставил, использовать его или нет для программистов –

+0

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

+0

На самом деле есть аргументы в пользу необязательных полей и геттеров. Это может стать отличной заменой для многих мест, где вы бы использовали null, но не пытались имитировать нулевые проверки с помощью isPresent. – ymajoros

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