2016-08-16 232 views
1

如果我有一个类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),对吧?

+0

一个接口不能扩展一个类。为了在接口之间继承,你必须使用implements。例如:Interface_Child实现Interface_Parent –

+0

@DheerajRoy不,这是不正确的。接口可以互相“延伸”... –

+0

是接口可以相互扩展,但接口不能扩展类 –

回答

1

已编译的类不会再被处理。

我创建了一个完整的测试设置并自己探索了这个问题。事实证明,只有实际上需要编译的文件才能通过注释处理运行。这意味着我可以安全地在库中包含_ParentImplParent_ParentImpl可以保留注释,然后可以使用@Retention(RetentionPolicy.CLASS)连接@Inherited以非常方便的方式将注释应用于子类。