正确使用Java批注以基于导入的外部库类生成类

时间:2019-06-16 02:53:17

标签: java annotations generated-code

给出一些我不能影响的导入类,

import com.foo.A;
import com.foo.B;
import com.foo.C;

我想生成ABC(例如

)共享的方法的接口
public interface Common {
    Uuid getId();
    Long getVersion();
    DateTime getCreated();
    DateTime getModified();
}

并生成实现此接口的代理类;

public class A extends com.foo.A implements Common {}
public class B extends com.foo.B implements Common {}
public class C extends com.foo.C implements Common {}

似乎我应该使用Java批注和JavaPoet来实现此目的,但是我不知道被标注的目标应该是什么。也就是说,我想写类似

的东西
@GenerateRelatedProxies("Common", com.foo.A, com.foo.B, com.foo.C)

但是,该注释应该是什么元素?我应该完全使用注释,还是您将如何处理这种代码生成?


如果这些类是相关的,那么为什么库不提供开始的接口?

原因是该库是从proto3生成的。我的理解是protobuf不支持继承,因为它希望与语言无关,并且某些语言不支持继承(例如 Rust)。但是,从概念上讲,我正在使用的类实际上与Cat,Dog和Bird相关,并且由于依赖于protobuf生成的类而在Java中到处复制粘贴相同的逻辑变得非常烦人。我认为按我的意愿组织实现代码是有效的,因为我断言Cat,Dog和Bird实际上是相关的。

0 个答案:

没有答案