java - 没有 getter/setters/toString/constructors 的清晰代码的 Lombok 替代方案

标签 java lombok

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

我使用的是 Java 1.7,无法更改为 1.8。

最佳答案

恐怕没有其他选择,除非您想切换到 Scala 之类的内容。或者对 AutoValue 提供的那些更小的功能集感到满意.

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

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

但它错过了

  • @Wither
  • toBuilder
  • @Setter
  • @Delegate
  • @ExtensionMethod
  • 还有一些我不使用的功能。

虽然我强烈同意不变性是一种美德,但它有时并不适用。不管怎样,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());

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

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

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

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

Lombok 使用了一些黑魔法,因此更加脆弱,但它提供了更多功能并且效果很好。

关于java - 没有 getter/setters/toString/constructors 的清晰代码的 Lombok 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21741166/

相关文章:

java - 使用java将csv文件导入oracle数据库

Java8 Stream : Why the method Stream. skip(long n) 需要 long 而不是 int 作为参数?

couchbase - 通过 `wither` 方法填充属性(property)

java - 如何使用 Java 和 Thymeleaf 将变量值传递给 HTML

java - Spring Boot验证,反序列化requestBody时期望字段,但不来自responseBody

java - JAXB - TreeGrid 解决 XmlElement 冲突

java - 如何给JDialog添加组件

java - Spring Cloud Zuul CircuitBreaker 所有路由均通过 TurbineStream 而不是 Turbine-AMQP

java - 将 Jackson 的 @JsonGetter 与 Lombok 的 @Getter 结合起来

java - 使用 Lombok 访问私有(private)内部类