Java注释处理 - 如何处理已处理的代码?
问题描述:
如果我有一个类Java注释处理 - 如何处理已处理的代码?
@GenerateInterface
public class _FooImpl {}
我要生成的接口
public interface Foo {}
,其基本上包含的_FooImpl
(即getter和setter)的所有方法。
另外,如果我有继承,像
@GenerateInterface
public class _ParentImpl {}
@GenerateInterface
public class _ChildImpl extends _ParentImpl {}
这将导致接口继承以及
public interface Parent {}
public interface Child extends Parent {}
我有一个粗略的想法如何做到这一点。但是如果_ParentImpl
是库的一部分呢?该库也必须包含Parent
。
在注释处理器中,我该如何处理?我无法再生成Parent
接口,因为那样我就有两次相同的接口。我能否以某种方式检测到它已经存在,但将它与已存在但不属于该库的文件区分开来,因此可以重写?
我其实只需要一个类/接口,其他任何扩展。因此,我可以从_ParentImpl
中删除@GenerateInterface
,并硬编码Parent
接口的继承。这将是我最后的手段。 编辑:或者完全删除界面,我可以设置@Retention(RetentionPolicy.SOURCE)
,对吧?
答
已编译的类不会再被处理。
我创建了一个完整的测试设置并自己探索了这个问题。事实证明,只有实际上需要编译的文件才能通过注释处理运行。这意味着我可以安全地在库中包含_ParentImpl
和Parent
。 _ParentImpl
可以保留注释,然后可以使用@Retention(RetentionPolicy.CLASS)
连接@Inherited
以非常方便的方式将注释应用于子类。
一个接口不能扩展一个类。为了在接口之间继承,你必须使用implements。例如:Interface_Child实现Interface_Parent –
@DheerajRoy不,这是不正确的。接口可以互相“延伸”... –
是接口可以相互扩展,但接口不能扩展类 –