0

注釈型を受け入れるようにメソッドを作成できるのに、それを渡すための注釈型を実際に持つ方法がないのはどうしてですか?

@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Sharpenable {}


@Sharpenable
public class Pencil {}


public void sharpen(Sharpenable sharpenable){
       System.out.println("sharpening a " + sharpenable.getClass().getSimpleName());
}
4

1 に答える 1

0

注釈のインスタンスを持つことができます。あなたの例では、それは

 Sharpenable s = Pencil.class.getAnnotation(Sharpenable.class); 

ただし、注釈はリフレクション コードで使用されるエンティティです。あなたの例では、このように作成しても意味がありません。Sharpenableシャープにすることができる他のさまざまなクラスによって実装されるインターフェイスである必要があります。それらに注釈を付けるスタイルを維持したい場合、コードはおそらく次のようになります。

 public void sharpen(Object sharpenable){
     if (sharpenable.getClass.getAnnotation(Sharpenable.class) != null)
         System.out.println("sharpening a " + sharpenable.getClass().getSimpleName());
     else
         throw new IllegalArgumentException("Not a sharpenable.");
 }
于 2012-12-14T14:29:45.453 に答える