【问题标题】:(Groovy/Java) Inheriting annotations to inner classes(Groovy/Java) 将注解继承到内部类
【发布时间】:2017-10-25 11:06:47
【问题描述】:

我有一堆类,它们又包含许多内部/嵌套类,需要注释以进行反序列化 (@JsonIgnoreProperties) 和减少 Equals 覆盖样板文件(@EqualsAndHashCode,Groovy 默认 API,而不是 Lombok)。

我的代码如下所示:

@JsonIgnoreProperties(ignoreUnknown = true)
@EqualsAndHashCode(includeFields = true)
class SomeClass {
    String id


    @JsonIgnoreProperties(ignoreUnknown = true)
    @EqualsAndHashCode(includeFields = true)
    class InnerOne {
        String foo
    }

    @JsonIgnoreProperties(ignoreUnknown = true)
    @EqualsAndHashCode(includeFields = true)
    class InnerTwo {
        String bar
    }

    // and so on...

}

这两个注释都属于第三方库并且没有标记为@Inherited,因此我不得不在每个内部类中重复它们。

有没有办法减少样板文件?

【问题讨论】:

    标签: java inheritance groovy annotations boilerplate


    【解决方案1】:

    注解处理器的作者已经决定继承注解是否是个好主意。

    • 作者可能会编写注解处理器来继承注解,这样用户就可以写更少的注解。
    • 作者可能将注解处理器编写为不继承注解,这样一个类的含义通过单独查看类就很明显,而不必同时阅读每个超类。

    其中任何一个都是合理的选择。我倾向于后者,因为它提高了可读性,而且代码的阅读频率高于编写频率。

    如果您希望更改行为,则需要通过修改其源代码来修改注释处理器的语义。在您的情况下,编写额外的注释可能更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      相关资源
      最近更新 更多