这是编译器故障吗?

时间:2012-12-14 14:25:06

标签: java methods annotations

如何编写一个方法来接受注释类型,但实际上没有办法实现一个注释类型来传递它?

@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());
}

1 个答案:

答案 0 :(得分:0)

您可以拥有注释实例。对于你的例子,它将是

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

但是,Annotations是反射代码中使用的实体。对于你的例子,让它像这样创建没有意义。 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.");
 }