检查调用方法是否已注释

时间:2017-02-27 12:03:52

标签: java reflection annotations

我有一个用例,其中callee方法的返回行为应该根据调用方法的注释而改变。

情况如下:

@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";
    }
}

我浏览了一些资源,发现this

我在考虑使用Thread.currentThread().getStackTrace()来获取当前的调用方法。

我不知道这是否可行或是否也是正确的设计。有人可以对此发表评论吗?

添加代码:

注释

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

主要课程

public class Main {

    public static void main(String[] args){
        Caller.caller();
    }
}

0 个答案:

没有答案