java caller_java – sun.reflect.CallerSensitive注释是什么意思?

根据JEP我链接的评论(也是

here),

A caller-sensitive method varies its behavior according to the class

of its immediate caller. It discovers its caller’s class by invoking

the sun.reflect.Reflection.getCallerClass method.

如果你看看Class#forName(String)的实现,

@CallerSensitive

public static Class> forName(String className)

throws ClassNotFoundException {

return forName0(className, true,

ClassLoader.getClassLoader(Reflection.getCallerClass()));

}

Returns the class of the caller of the method calling this method, ignoring frames associated with java.lang.reflect.Method.invoke() and its implementation.

@CallerSensitive

public static native Class getCallerClass();

在这个JEP之前,似乎这个问题是,如果调用者敏感方法是通过反射而不是直接调用的,那么必须有一个复杂的过程来确定实际的调用类是什么。如果通过反射调用该方法,这是有问题的。提出(并引入)@CallerSensitive的一个更简单的过程。

基本上,@CallerSensitive注释由JVM使用

The JVM will track this annotation and, optionally, enforce the

invariant that the sun.reflect.Reflection.getCallerClass method can only report the caller of a method when that method is marked with this annotation.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值