【问题标题】:Project Lombok - customise generated SetterProject Lombok - 自定义生成的 Setter
【发布时间】:2018-01-04 14:09:22
【问题描述】:

有没有办法为@Setter自定义生成的代码?

考虑以下简单类:

@Entity
@Getter
@Setter
@NoArgsConstructor
public class MyEntity implements Serializable {

      @Id private long id;

      @OneToMany
      private Set<AttributeColumn> columns = new HashSet<>();

      public void setColumns(Set<AttributeColumn> columns) {
          this.columns.clear();
          this.columns.addAll(columns);
      }
}

我希望 Lombok 为 columns 生成 Setter,因为我在上面的示例中实现了它。这只应在使用@Entity 注释的类和Collection 的属性上完成。其他属性的 Setter,在这个例子中是 id 应该像往常一样生成。

有没有办法根据这些条件自定义 Setter 代码的生成?

【问题讨论】:

  • 从技术上讲,您可以扩展 Lombok。实际上,这并不容易。您需要了解 Eclipse 和 Javac 树结构,并且让 Lombok 从源代码编译也很麻烦。但并非不可能。
  • 我明白了,我误读了你的问题。为投反对票而道歉。如果您编辑您的问题,我会撤消它。
  • @maaartinus 我编辑了这个问题,感谢您删除了反对票。虽然目前不可能,但我不认为这个问题对其他人没有用处。另外,感谢您对答案的澄清!

标签: java customization lombok


【解决方案1】:

没有。


不,没有这样的功能,也没有计划。

正如评论中所述,您可以自己做,但这并不容易。此外,您必须决定对逻辑进行硬编码(简单但可能对其他人无法使用)或解释类似

@SetterWhen(@Or(
    @Condition(annotatedWith=Entity.class), 
    @Condition(declaredType=Collection.class)))

这几乎不可能实现(因为当 Lombok 运行时此信息不可用)。


目前,您所能做的就是允许在每个字段的基础上抑制生成。但是,不可能生成不同的 setter 有一个相关的功能:@Singular,它可能对你有帮助,也可能没有。

【讨论】:

  • 这不能回答我的问题。
  • @MarcoNätlitz 现在可以了。
  • @MarcoNätlitz 感谢您的接受。最初,我忘了提供答案,因为已经有评论明确表示这是不可能的。现在我添加了一些细节(也许对你有用,也许对其他人有用)。
猜你喜欢
  • 1970-01-01
  • 2017-10-31
  • 2012-08-01
  • 2020-05-19
  • 1970-01-01
  • 2011-02-06
  • 2015-11-23
  • 2021-01-11
  • 1970-01-01
相关资源
最近更新 更多