2017-09-25 73 views
1

是否有辦法強制編譯器檢查是否在父方法中使用了與child方法相同的註釋。如果我使用@NotNullString一切都按我的預期工作。@Override不強制在重寫的方法中使用枚舉註釋

public static final int FIRST_ENUM = 0; 
public static final int SECOND_ENUM = 1; 

@IntDef(value = { 
     FIRST_ENUM, 
     SECOND_ENUM 
}) 
@Retention(RetentionPolicy.SOURCE) 
public @interface MyEnum { 
} 

class Parent { 
    public void method(@MyEnum int a) { 
    } 
} 

class Child extends Parent { 
    @Override 
    public void method(int a) { // This is valid otherwise there is no @MyEnum 
    } 
} 

此代碼是有效的,雖然我不覆蓋所有註釋。

回答

0

要使編譯器檢查註釋的一致性,必須在編譯期間運行註釋處理器。您可以使用標準的javac -processor標誌來做到這一點。在沒有註釋處理器的情況下運行時,編譯器將大多數註釋寫入.class文件,但不驗證它們的語義。

您可以定義自己的註釋處理器,或使用其他人編寫的註釋處理器。 Checker FrameworkFake Enum Checker可以在編譯時驗證您的@MyEnum註釋的正確使用。

+0

感謝您的建議,但我需要在Android Studio中進行註釋檢查,並且Android Studio會自動進行一些檢查。例如'int sth = 10;''@MyEnum int num = sth;/*沒有錯誤(壞)* /''num = sth;/*錯誤顯示(ok)* /'也許所有檢查尚未執行... – mmrmartin

+0

您可以向Android Studio團隊提交錯誤報告並等待他們解決。在此之前,您可以使用第三方工具,如[Enum Checker](https://checkerframework.org/manual/#fenum-checker)。 – mernst