2017-09-25 11 views
1

부모 메서드에서와 마찬가지로 하위 메서드에 동일한 주석을 사용하면 컴파일러에서 확인하도록하는 방법이 있습니까? @NotNullString을 사용하면 모든 것이 정상적으로 작동합니다.@Override가 재정의 된 메서드에서 enum 주석을 사용하도록 설정하지 않았습니다.

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에서 주석 검사가 필요합니다. 일부 Studio에서는 자동으로 확인합니다. 예 :'int sth = 10;''@MyEnum int num = sth;/* 오류없이 (나쁜) * /''num = sth;/* 오류 표시 (확인) * /'모든 수표가 아직 구현되지 않은 것일 수 있습니다 ... – mmrmartin

+0

Android Studio 팀에 버그 보고서를 제출하고 수정하기를 기다립니다. 그때까지 [열거 형 검사기] (https://checkerframework.org/manual/#fenum-checker)와 같은 타사 도구를 사용할 수 있습니다. – mernst