你知道任何龙目岛的替代品吗? 使用Lombok我们可以忘记使用getter和setter以及toString搞乱类,我想在我的项目中使用它但是我想知道是否有更好的替代方案?
我使用的是Java 1.7 ..并且无法更改为1.8。
答案 0 :(得分:24)
我担心,除非您想切换到Scala之类的内容,或者对AutoValue提供的一小部分功能感到满意,否则别无选择。
虽然AutoValue
可能是纯Java最好的,但它提供了
但它错过了
虽然我非常同意不变性是一种美德,但它有时并不适用。无论如何,龙目岛努力支持不变性,它甚至与Guava的不可变集合集成,你可以写
@Builder @Getter public final class Sentence {
private final boolean truthValue;
@Singular private final ImmutableList<String> 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
都使用了一些魔法。后者的神奇之处在于标准的注释处理,所以它非常强大。它有page 27中列出的一些缺点。我添加了一些事实,即生成了一些我没有订购的AutoValue_foo。
龙目岛使用了一些黑魔法,因此更加脆弱,但它提供的更多,效果更好。
答案 1 :(得分:11)
“更好”在这里引起争议,但另一种选择是AutoValue,可用here。 This presentation解释了AutoValue与例如AutoValue之间的一些差异。龙目岛。
特别是,AutoValue强调不变性(一般来说是好事!)和最少的语言魔术(与龙目岛非常不同)。