Lombok替代清除代码而没有getter / setter / toString / constructors
你知道龙目岛的其他选择吗? 使用Lombok我们可以忘记使用getter和setter以及toString来搞乱这个类,我想在我的项目中使用它但是我想知道是否有更好的选择?
我使用Java 1.7 ..并且无法更改为1.8。
我担心,除非你想切换到像Scala这样的东西,或者对像AutoValue提供的一小部分function感到满意,否则别无选择。
虽然AutoValue
可能是纯Java最好的,但它提供了
- @Getter
- @AllArgsConstructor
- @EqualsAndHashCode
- @ToString
- @Builder
但它错过了
- @枯萎
- toBuilder
- @Setter
- @代表
- @ExtensionMethod
- 还有一些我不使用的function。
虽然我非常同意不变性是一种美德,但它有时并不适用。 无论如何,龙目岛努力支持不变性,它甚至与Guava的不可变集合集成,你可以写
@Builder @Getter public final class Sentence { private final boolean truthValue; @Singular private final ImmutableList words; }
并使用它
Sentence s = Sentence.builder().truthValue(true) .word("Lombok").word("is").word("cool").build(); assertEquals(3, s.getWords().size());
注意:我不是作者,所以我可以说它很酷。
对于不可变的, @Wither
和toBuilder
非常酷。 前者允许您创建一个不同于单个字段的副本,后者为您提供一个以当前值开头并适合更改多个字段的构建器。 以下两行是等效的:
o.withA(1).withB(2) o.toBuilder().a(1).b(2).build()
Lombok和AutoValue
使用了一些魔法。 后者的神奇之处在于标准的注释处理,所以它非常强大。 它有一些缺点,如第27页所列。 我添加了一些AutoValue_foo生成的事实,我没有订购。
龙目岛使用一些黑魔法,因此更脆弱,但它提供更多,并且工作得很好。
“更好”在这里是相当有争议的,但另一种选择是AutoValue ,可在此处获得 。 此演示文稿解释了AutoValue与Lombok之间的一些差异。
特别是,AutoValue强调不变性(一般来说是好事!)和最少的extralinguistic魔术(与Lombok非常不同)。