在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  網(wǎng)絡(luò)安全/ Reflection.getCallerClass()使用的問題

Reflection.getCallerClass()使用的問題

關(guān)于Java的問題,一般通過將堆棧作為關(guān)鍵詞到搜索引擎搜索就有結(jié)果了。:)
這次遇到的問題有點意思,程序也很簡單,所以就在提問下。
以下代碼有什么問題呢?CallerSensitive annotation是什么意思?

import sun.reflect.Reflection;

public class CalleeApp {

    public void call() {
        Class<?> clazz = Reflection.getCallerClass();
        System.out.println("Hello " + clazz);
    }
}
public class CallerApp {

    public static void main(String[] args) {
        CalleeApp app = new CalleeApp();
        Caller1 c1 = new Caller1();
        c1.run(app);
    }

    static class Caller1 {
        void run(CalleeApp calleeApp) {
            if (calleeApp == null) {
                throw new IllegalArgumentException("callee can not be null");
            }
            calleeApp.call();
        }
    }

}

錯誤的堆棧

Exception in thread "main" java.lang.InternalError: CallerSensitive annotation expected at frame 1
    at sun.reflect.Reflection.getCallerClass(Native Method)
    at com.honey.caller.CalleeApp.call(CalleeApp.java:8)
    at com.honey.caller.CallerApp$Caller1.run(CallerApp.java:18)
    at com.honey.caller.CallerApp.main(CallerApp.java:8)

Java版本:

Picked up _JAVA_OPTIONS:   -Dawt.useSystemAAFontSettings=gasp
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-8u141-b15-3-b15)
OpenJDK 64-Bit Server VM (build 25.141-b15, mixed mode)

UPDATE 2018年04月11日22:07:12
我覺得這篇文章是對這個問題的很好的解答,為什么不建議調(diào)用sun包,如何通過其他方法確定調(diào)用者

回答
編輯回答
影魅
@Deprecated
/*     */   public static native Class<?> getCallerClass(int paramInt);

加上int型參數(shù),
沒用過這個方法,嘗試一下
0:返回sun.reflect.Reflection
1:返回當前類的Class對象
2:返回調(diào)用該方法的Class對象

2017年4月21日 15:01