2016-08-16 230 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以非常方便的方式將註釋應用於子類。