문제

는 경우스 클래스 정의 주석,그것은 어떻게든 가능한 힘의 서브 클래스를 정의하는 동 주석?

예를 들어,우리는 간단한 클래스/서브 클래스는 쌍 공유 @Author @interface. 내가 무엇을 하려고 하는 것은 힘을 더욱 각 서브 클래스를 동일하게 정의 @Author 주석 방지 RuntimeException 어딘가에 있습니다.

TestClass.java:

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@interface Author { String name(); }

@Author( name = "foo" )
public abstract class TestClass
{
    public static String getInfo( Class<? extends TestClass> c )
    {
        return c.getAnnotation( Author.class ).name();
    }

    public static void main( String[] args )
    {
        System.out.println( "The test class was written by "
                        + getInfo( TestClass.class ) );
        System.out.println( "The test subclass was written by " 
                        + getInfo( TestSubClass.class ) );
    }
}

TestSubClass.java:

@Author( name = "bar" )
public abstract class TestSubClass extends TestClass {}

나는 열거할 수 있습니다 모든 주석에서 런타임 및 확인에 대한 없 @Author, 지만,나는 진짜로 좋아하는 이렇게 컴파일 시 가능한 경우.

도움이 되었습니까?

다른 팁

나는 확실히 이것은 불가능을 컴파일때 정해진다.

그러나,이것은 명백한 작업에 대한"단위"트에는 다음이 포함됩니다.당신이 규칙을 좋아하는 이는 적용되지만,어려울 수 있는 것이 불가능을 확인과 함께 컴파일러,"유닛"-테스트는 간단하는 방법을 확인하는 그들.

또 다른 가능성을 구현하고 사용자 지정 규칙에서 정적 분석기입니다.많은 옵션이 있습니다.

(I 을 넣어 단위를 놀라게 따옴표,이것은 정말 테스의 규칙이 아닌 특정 단위.하지만 그것을 실행해야와 함께 장치-테스트).

을 만들 수 있는 주석(예:@EnforceAuthor)와@상속에서는 수퍼 클래스고 사용하는 컴파일러한 주석(이후 자바 1.6)잡은 컴파일때 정해진다.다음을 참조해 서브 클래스고 확인할 수 있는 경우 또 다른 주석(예:@Author))가 없습니다.할 수 있다는 것입 취소 컴파일과 오류 메시지가 표시됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top