如何编写一个方法来接受注释类型,但实际上没有办法实现一个注释类型来传递它?
@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());
}
答案 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.");
}