在Eclipse中使用AutoValue代码生成器

我的EclipseSource的同事Moritz最近遇到了Google Auto,它是Java代码生成器的集合。 AutoValue是其中之一,它为不可变对象生成Java代码。 它提供一个注释和一个注释处理器 ,以为不可变值对象生成Java代码。 当前版本标记为RC1,即将发布1.0版。

想法是要有一个定义外部行为的抽象类,而注释处理器将完成其余工作。 对于每个期望的字段,定义了一个抽象访问器方法。 最后,需要一个工厂方法来创建所生成类的实例。

@AutoValue
abstract class Person {
  static Person create( String name, int age ) {
    return new AutoValue_Person( name, age );
  }

  abstract String name();
  abstract int age();
}

运行处理器之后,您还将拥有一个AutoValue_Person类,该类位于同一包中,并实现访问器方法以返回字段值。 它还实现了equals,hashCode和toString。 生成的代码如下所示:

final class AutoValue_Person extends Person {
  private final String name;
  private final int age;

  AutoValue_Person(String name, int age) {
    if (name == null)
      throw new NullPointerException("Null name");
    this.name = name;
    this.age = age;
  }

  String name() {
    return name;
  }
  ...

  public String toString() {
    ...
  }

  public boolean equals(Object o) {
    ...
  }

  public int hashCode() {
    ...
  }
}

如您所见,其中没有魔术。 处理器生成可读且可调试的代码,而没有任何运行时相关性。 可以自定义可空性,序列化,等于的自定义实现,hashCode和toString等方面。 单击项目自述文件中的链接以获取所有详细信息。

我很想想到一个可以做一件事并且做得很好的小工具。 编写EqualsTester的很大一部分是通过测试equals和hashCode(可能是针对不可变的值对象)而进行的。 如果AutoValue已经存在了,那么它可能会节省一些精力。 但是,如果该工具不能很好地集成到您选择的IDE中,那么它的实用性将受到限制。

将AutoValue集成到Eclipse中

在IDE中使用AutoValue时,您可能希望在保存源文件后立即生成代码。 我选择的IDE是Eclipse,因此我采取了以下步骤将注释处理器集成到Eclipse中。

必须为每个项目指定Eclipse中注释处理的规则。 因此,第一件事是为使用处理器的项目启用注释处理(项目属性> Java编译器>注释处理)。 默认情况下,生成的代码将写入单独的源文件夹(“生成的源目录”设置),以便可以将其从版本控制中排除。

接下来,我告诉Eclipse在哪里可以找到@AutoValue注释的注释处理器。 处理器与注释本身一起打包在auto-value-1.0-rc1.jar中。 从这个jar开始,沿着它的依赖关系链,我最终得到了运行处理器所必需的这些库(所有这些库都可以从Maven Central获得):

  • 自动服务1.0-rc1.jar
  • 番石榴16.0.1.jar
  • jsr-305-2.0.3.jar
  • 自动值1.0-rc1.jar

适当的工厂路径
好吧,一切都是有代价的。 但是,将这些罐子添加到“工厂路径”就足够了。 每当我按Ctrl + S时,处理器都会为项目中每个@AutoValue注释类生成(重新)代码-非常时尚……

剩下的就是使设置易于为其他团队成员使用。 这里的问题是将罐子放置在可跨不同开发人员计算机移植的位置。 除了检查设置和源代码存储库中约2MB的jar之外,我没有找到其他解决方案。 虽然绝对不希望在存储库中使用二进制文件,但是让每个团队成员从某个地方拉出罐子也同样糟糕。 如果您知道解决此难题的方法,请分享您的想法。

参考:来自Code Affine博客的JCG合作伙伴 Rudiger Herrmann 在Eclipse中使用AutoValue代码生成器

翻译自: https://www.javacodegeeks.com/2014/03/using-the-autovalue-code-generator-in-eclipse.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值