어떻게 힘 Java 클래스를 정의하는 주석?
-
01-07-2019 - |
문제
는 경우스 클래스 정의 주석,그것은 어떻게든 가능한 힘의 서브 클래스를 정의하는 동 주석?
예를 들어,우리는 간단한 클래스/서브 클래스는 쌍 공유 @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))가 없습니다.할 수 있다는 것입 취소 컴파일과 오류 메시지가 표시됩니다.
제휴하지 않습니다 StackOverflow