Lombok替代清除代码,没有getter/setter/toString/constructors

30 java lombok

你知道龙目岛的其他选择吗?使用Lombok我们可以忘记使用getter和setter以及toString搞乱类,我想在我的项目中使用它但是我想知道是否有更好的选择?

我使用的是Java 1.7 ..并且无法更改为1.8.

maa*_*nus 25

我担心,除非你想切换到像Scala这样的东西,或者对像AutoValue提供的一小部分功能感到满意,否则别无选择.

虽然AutoValue它可能是纯Java最好的,但它提供了

  • @Getter
  • @AllArgsConstructor
  • @EqualsAndHashCode
  • @ToString
  • @Builder

但它没错

  • @枯萎
  • toBuilder
  • @Setter
  • @代表
  • @ExtensionMethod
  • 还有一些我不使用的功能.

虽然我非常同意不变性是一种美德,但它有时并不适用.无论如何,龙目岛努力支持不变性,它甚至与Guava的不可变集合集成,你可以写

@Builder @Getter public final class Sentence {
    private final boolean truthValue;
    @Singular private final ImmutableList<String> words;    
}
Run Code Online (Sandbox Code Playgroud)

并使用它

Sentence s = Sentence.builder().truthValue(true)
    .word("Lombok").word("is").word("cool").build();
assertEquals(3, s.getWords().size());
Run Code Online (Sandbox Code Playgroud)

注意:我不是作者,所以我可以说它很酷.

对于immutables,@WithertoBuilder很酷.前者允许您创建一个不同于单个字段的副本,后者为您提供一个以当前值开头并适合更改多个字段的构建器.以下两行是等效的:

o.withA(1).withB(2)
o.toBuilder().a(1).b(2).build()
Run Code Online (Sandbox Code Playgroud)

龙目岛都AutoValue使用了一些魔法.后者的神奇之处在于标准的注释处理,所以它非常强大.它有一些缺点,如第27页所列.我添加了一些事实,我生成了一些我没有订购的AutoValue_foo.

龙目岛使用一些黑魔法,因此更脆弱,但它提供更多,并且工作得很好.


Lou*_*man 12

"更好"在这里是相当有争议的,但另一种选择是AutoValue,可在此处获得. 此演示文稿解释了AutoValue和Lombok之间的一些差异.

特别是,AutoValue强调不变性(一般来说是好事!)和最少的语言魔术(与龙目岛非常不同).