2016-09-22 246 views
2

考慮:如何在註釋中使用註釋?

public @interface MyAnnotation(){ 
    public SomeType[] value(); 
} 

在Java 7中是有可能做這樣的事情:

@MyAnnotation({ 
    value1, 
    @MyAnnotation({subValue1, subvalue2, ...}) value2, 
    ... 
    valueN 
}) 
public Object someProperty; 

+0

您是否打算創建一個框架來使用它? –

+0

MyAnnotation是否來自SomeType? (對,我不這麼認爲)。那麼你想如何創建一個'SomeType'數組,其中包含一個不是'SomeType'類型的元素? –

+0

@TimBiegeleisen是的。 – Sayid

回答

-1

你可以。這是Jackson庫(而忽略了評論)一個例子:

package com.fasterxml.jackson.annotation; 

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE, ElementType.FIELD, 
    ElementType.METHOD, ElementType.PARAMETER}) 
@Retention(RetentionPolicy.RUNTIME) 
@JacksonAnnotation 
public @interface JsonSubTypes { 
    public Type[] value(); 

    public @interface Type { 
     /** 
     * Class of the subtype 
     */ 
     public Class<?> value(); 

     /** 
     * Logical type name used as the type identifier for the class 
     */ 
     public String name() default ""; 
    } 
} 

而且這裏有一個例子用法:

@JsonSubTypes({ 
     @JsonSubTypes.Type(value = TestSystemEvent.class, name = "TestEvent"), 
}) 
public interface SystemEvent { 
} 
+1

這只是解釋瞭如何多次使用相同的註釋。不完全符合我的問題。此外,彼此使用的註釋是不同的。 'JsonSubTypes'中使用的'JsonSubTypes.Type'。 – Sayid

+0

註解被認爲是元數據。它們不是對象,所以它們不會與String等其他實例共享相同的祖先Object。 – mtyurt

-1

How to use annotation in an annotation?

也許這樣

public @interface MyAnnotation(){ 
    public SomeType[] value(); 

    public MyAnnotation[] refine(); 
} 

@MyAnnotation(
    {value1, value2}, 
    refine={ @MyAnnotation({valueX, valueY}), @MyAnnotation(valueM) } 
) 
public Object someProperty; 

另外,在Java 8中,您可以擁有Repeatable註釋tions - 所以你可以改進或添加到你的'主'(例如第一次)通過後續重複的相同註釋帶來的其他改進。

+1

這給編譯器錯誤:'循環註釋元素類型' – Sayid

+0

好吧,正如我所說...「也許」。回到可重複。或創建另一個具有類似價值的註釋 –