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' 和强制转换以继续使用它。
我希望我选择的标题尽可能清楚。 我有 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' 和强制转换以继续使用它。