@CallerSensitive
註釋上面的方法是什麼暗示的?sun.reflect.CallerSensitive註釋是什麼意思?
例如,註釋存在於類
@CallerSensitive
public ClassLoader getClassLoader() {
//
}
@CallerSensitive
註釋上面的方法是什麼暗示的?sun.reflect.CallerSensitive註釋是什麼意思?
例如,註釋存在於類
@CallerSensitive
public ClassLoader getClassLoader() {
//
}
據的getClassLoader方法我鏈接到註釋(也here)的JEP,
呼叫者敏感方法而變化其行爲根據其直接呼叫者的類 。它通過調用
sun.reflect.Reflection.getCallerClass
方法來發現其調用者的類。
如果你看看Class#forName(String)
@CallerSensitive
public static Class<?> forName(String className)
throws ClassNotFoundException {
return forName0(className, true,
ClassLoader.getClassLoader(Reflection.getCallerClass()));
}
實施,您會注意到它正在使用Reflection.getCallerClass()
。如果我們看看該方法
返回調用此方法的方法的調用方的類,忽略與
java.lang.reflect.Method.invoke()
及其實現關聯的幀。
@CallerSensitive
public static native Class getCallerClass();
的問題,現在看來,這個JEP之前,有人認爲如果呼叫者敏感的方法是通過反射,而不是直接調用,必須有一個複雜的過程,以確定哪些實際調用類了。如果該方法是通過反射調用的,則這是有問題的。與@CallerSensitive
建議(並介紹)一個更簡單的過程。
基本上,@CallerSensitive
註釋用於由JVM
JVM將跟蹤該註釋和,可選地,執行 不變,該
sun.reflect.Reflection.getCallerClass
方法可以 只報告的方法的調用者時該方法標註爲 此註釋。
所以我明白,它是有用的反映識別調用者類,對嗎?並且由於JVM正在跟蹤它,JVM將無法識別任何在其方法中具有此註釋的自定義類那麼它對Core庫有用嗎? –
@AbhinavKumar是的,那是我的理解。但我認爲自定義類也可以使用它。你必須嘗試一下。 –
我很驚訝地發現這個太陽內部的API泄漏到了JDK的公共API中。爲什麼不是不是'java.lang.reflect.CallerSensitive'註釋? –
開始[這裏](http://openjdk.java.net/jeps/176)。 –
謝謝,但它太技術和混亂 –