2016-09-22 18 views
2

アノテーションで注釈を使用するにはどうすればよいですか?与えられた

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

:Javaの7の

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

は次のように何かをすることは可能ですか?

+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

注釈はメタデータとみなされます。それらはオブジェクトではないので、同じ祖先ObjectをStringのような他のインスタンスと共有することはありません。 – 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 annotaあなたはあなたの「プライマリ」に精緻化または追加することができます(例:最初の)同じアノテーションのその後の繰り返しによってもたらされる他の改良。

+1

これはコンパイラエラーを出します: 'Cyclic annotation element type ' – Sayid

+0

私が言ったように..."多分 "。 Repeatableに落ちる。または、類似の値を持つ別の注釈を作成する –

関連する問題