2014-04-04 4 views
2

주석이 달린 개체에서 테이블을 생성하고 싶습니다. 지금 나는 다음과 같은 스키마를 염두에두고있다. 다음과 같이 내가 객체를 주석 싶습니다 : 그 내용은Java Annotation "Inheritance"

@UI.App(
    name = "locations", 
    columns = { 
      @UI.Presenter.PropertyColumn("title"), 
      @UI.Presenter.PropertyColumn("enabled"), 
      @UI.Presenter.StatusColumn, 
      @UI.Presenter.LastModifiedColumn 
    } 
) 
public class Location { 
    private String title; 
    private Boolean enabled; 
} 

을 나는 다음과 같은 주석 주석 상속

public interface UI { 

    @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) 
    public @interface App { 
     public String name(); 
     public Presenter.Column[] columns() default {}; 
    } 

    public interface Presenter { 

     @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) 
     public @interface Column {} 

     @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) 
     public @interface PropertyColumn { 
      public String value(); 
      public boolean editable() default false; 
     } 

     @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) 
     public @interface StatusColumn {} 

     @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) 
     public @interface LastModifiedColumn {} 
    } 
} 

난 그냥 PropertyColumn, StatusColumn 및 LastModifiedColumn는 열을 확장 할 것을 사용하도록 구성 인터페이스. 그러나 인터페이스 상속은 없습니다.

주요 목표는 개요 주석을 가능한 간결하게 만드는 것입니다. 내 목표를 달성하는 가장 좋은 방법은 무엇입니까?

답변

1

주석이 복잡한 구조를 나타낼 정도로 유연하지 않은 경우 일 수 있습니다. 깨끗하지보고 있지만,이 같은 각 열 유형에 대한 열거 형 상수를 단일 열 주석을 사용하여 만드는 것이 좋습니다 것입니다 :

@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) 
public @interface Column { 
    ColumnType value(); 
    String property() default ""; 
    boolean editable() default false; 
} 

@UI.App(
    name = "locations", 
    columns = { 
      @UI.Presenter.Column(value=ColumnType.PROPERTY, property="title"), 
      @UI.Presenter.Column(value=ColumnType.PROPERTY, property="enabled"), 
      @UI.Presenter.Column(ColumnType.STATUS), 
      @UI.Presenter.Column(ColumnType.LAST_MODIFIED) 
    } 
) 

주의 사항은 어떤와 함께 사용할 수 propertyeditable을 방지하기 위해 추가 검사 및 문서가 필요하다 열 유형. 추가 값으로 더 많은 열 유형을 추가하려는 경우이 방법은 효과가 없을 것입니다.