有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    “更好”在这里相当有争议,但有一种选择是AutoValue,可用hereThis presentation解释了AutoValue和Lombok之间的一些差异

    特别是,AutoValue强调不变性(通常是一件好事!)以及最低限度的语言外魔法(与龙目山大不相同)

  2. # 2 楼答案

    恐怕没有其他选择,除非你想切换到像Scala这样的东西,或者对像AutoValue所提供的一组较小的特性感到满意

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

    • @吸气剂
    • @AllArgsConstructor
    • @EqualsAndHashCode
    • @托斯特林
    • @建筑商

    但它错过了

    • @枯萎
    • 托布勒
    • @塞特
    • @委派
    • @扩展方法
    • 还有一些我不用的功能

    虽然我非常同意不变性是一种美德,但它有时并不适用。无论如何,Lombok努力支持不变性,它甚至与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());
    

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

    对于不可变的,@WithertoBuilder非常酷。前者允许您创建一个与单个字段不同的副本,后者提供一个从当前值开始并适合更改多个字段的生成器。以下两行是等效的:

    o.withA(1).withB(2)
    o.toBuilder().a(1).b(2).build()
    

    Lombok和AutoValue都使用了一些魔法。后者的神奇之处在于标准的注释处理,因此它非常健壮。如page 27所列,它有一些缺点。我要补充一个事实,即生成了一些我没有订购的AutoValue\u foo

    Lombok使用了一些黑魔法,因此更加脆弱,但它提供了更多,效果也非常好