💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### **Reflection.getCallerClass\(\)** Reflection的getCallerClass的使用:可以得到调用者的类 Reflection.getCallerClass\(\)此方法的调用者必须有权限 * 由bootstrap class loader加载的类可以调用 * 由extension class loader加载的类可以调用 * 都知道用户路径的类加载都是由 application class loader进行加载的,换句话说就是用户自定义的一些类中无法调用此方法 Reflection.getCallerClass\(\)方法调用所在的方法必须用@CallerSensitive进行注解,通过此方法获取class时会跳过链路上所有的有@CallerSensitive注解的方法的类,直到遇到第一个未使用该注解的类,避免了用Reflection.getCallerClass\(int n\)这个过时方法来自己做判断 ``` @Deprecated //该方法已不建议使用 public static native Class<?> getCallerClass(int var0); ``` _**注意:从jdk 7u40开始,Oracle已经弃用了sun.reflect.package包里不易理解的Reflection.getCallerClass(int)方法。在Java 7中,通过设置Java命令行选项Djdk.reflect.allowGetCallerClass,可以继续使用该方法。但在Java 8及以后的版本中,该方法将被彻底删除,调用它会导致UnsupportedOperationException异常。**_ _**JDK 8中在getCallerClass方法加了 @sun.reflect.CallerSensitive 注解,该注解是提供给JVM底层读取处理的,提高了JDK实现感知调用者功能的安全性**_ _**根据Java文档,Reflection类位于调用栈中的0帧位置,该方法返回调用栈中从0帧开始的第x帧中的类。总之,getCallerClass方法提供的机制可用于确定调用者,从而实现“感知调用者(Caller Sensitive)”的行为,即根据调用类或调用栈中的其它类来调整其自身的行为**_ _参考资料:_ [http://www.infoq.com/cn/news/2013/07/Oracle-Removes-getCallerClass](http://www.infoq.com/cn/news/2013/07/Oracle-Removes-getCallerClass)