Java 仅注释的方法参数 class

Java method parameter for only annotated class

我希望我选择的标题尽可能清楚。 我有 classes 用自定义注释

注释
@MyAnnotation
public class MyClass1 {
   //...
}
@MyAnnotation
public class MyClass2 {
   //...
}

我还有另一个 class,我想用两个同名的方法来丰富它: 一种方法仅将带注释的 class 作为参数,另一种方法将其他 classes 作为参数

public class MyOtherClass {
   public void myMethod(Object obj) {
       //.....
   }
   public void myMethod (@MyAnnotation Object obj) {
       // this method is applied for only classes annotated with @MyAnnotation
   }
}

我知道 public void myMethod (@MyAnnotation Object obj) 是错误的方式,我们不能将注释作为参数传递。但我想找到合适的方法来处理这个需求。

您可以有一个 myMethod(Object obj) 并在其中手动检查传递给此方法的 obj 是否用 @MyAnnotation 注释(假设保留策略是将其保留在运行)。然后根据结果将调用分派给一些 private void processAnnotated(Object obj)private void processNotAnnotated(Object obj)

public void myMethod(Object obj) {
  if (obj != null && obj.getClass().isAnnotationPresent(MyAnnotation.class))  {
    processAnnottated(obj);
  } else {
    processNotAnnottated(obj);
  }
}

我不确定你想要达到什么目的。正如您所说,您不能注释参数。您可以将注释标记为运行时,但如果注释存在或不存在,则只能通过反射进行检查。因此,您可以通过调用私有验证方法 validateMyAnnotationIsSet(parameter) 来启动 myMethod,该方法检查是否在给定的 class 上设置了注释。

也许使用 MarkerInterface 会更好。您可以创建一个 class 可能实现也可能不实现的空接口。在您的方法中,您可以接受该接口作为参数,然后执行 'instanceof' 和强制转换以继续使用它。