Java 检查调用方法是否已注释
我有一个用例,被调用方方法的返回行为应该根据调用方方法的注释而改变 情况如下:Java 检查调用方法是否已注释,java,reflection,annotations,Java,Reflection,Annotations,我有一个用例,被调用方方法的返回行为应该根据调用方方法的注释而改变 情况如下: @SomeAnnotation public void caller(){ return SomeOtherClass.caller(String arg); } // Returns X in this case public class SomeOtherClass{ public String callee(String arg){ if(annotationIsPrese
@SomeAnnotation
public void caller(){
return SomeOtherClass.caller(String arg);
}
// Returns X in this case
public class SomeOtherClass{
public String callee(String arg){
if(annotationIsPresent(SomeAnnotation.class))
return "X";
else
return "Y";
}
}
我查阅了一些资料,发现了
我正在考虑使用来获取当前的invoker方法
我不知道这是可行的还是正确的设计。有人能评论一下吗
添加代码:
注释
@Retention(RetentionPolicy.RUNTIME)
public @interface SomeAnnotation {
}
调用类
@SomeAnnotation
public class Caller {
@SomeAnnotation
public static void caller(){
System.out.println(new Callee().callee());
}
}
被叫
public class Callee {
public String callee(){
String className = Thread.currentThread().getStackTrace()[2].getClassName();
String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
try {
Class<?> klass = Class.forName(className);
Method method = klass.getMethod(methodName);
if(klass.isAnnotationPresent(SomeAnnotation.class))
System.out.println("HELLO");
if(method.isAnnotationPresent(SomeAnnotation.class))
System.out.println("HELLOW");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
你找到了一些资源-你尝试了吗?我正在尝试。我需要关于设计方法的建议。这是正确的组合方式吗?可能重复:问题的不同之处在于我不知道调用方方法的类的名称。另外,调用方方法的名称可能是什么。我真的建议不要这样做。是的,您可以查看stacktrace(这是一个很慢的btw)并找到调用者,它将工作。。。直到您在不太传统的JVM上运行它,或者发生某种JIT优化,并且跟踪不再存在。更好的做法是为该调用方提供不同配置或不同的代码实例。您找到了一些资源-您尝试了吗?我正在尝试。我需要关于设计方法的建议。这是正确的组合方式吗?可能重复:问题的不同之处在于我不知道调用方方法的类的名称。另外,调用方方法的名称可能是什么。我真的建议不要这样做。是的,您可以查看stacktrace(这是一个很慢的btw)并找到调用者,它将工作。。。直到您在不太传统的JVM上运行它,或者发生某种JIT优化,并且跟踪不再存在。相反,为该调用方提供不同配置的或不同的代码实例会更好。
public class Main {
public static void main(String[] args){
Caller.caller();
}
}