http://www.infoq.com/cn/news/2013/07/Oracle-Removes-getCallerClass

作为Java开发者,我们经常忽略@Deprecated注释,继续使用这些功能,即使我们很清楚Oracle会在某个时间拿到这一标签,但仍然幻想着这些标签像刻在石头上那样不可磨灭。

jdk 7u40开始,Oracle已经弃用了sun.reflect.package包里不易理解的Reflection.getCallerClass(int)方法。在Java 7中,通过设置Java命令行选项Djdk.reflect.allowGetCallerClass,可以继续使用该方法。但在Java 8及以后的版本中,该方法将被彻底删除,调用它会导致UnsupportedOperationException异常。

根据Java文档,Reflection类位于调用栈中的0帧位置,该方法返回调用栈中从0帧开始的第x帧中的类。总之,getCallerClass方法提供的机制可用于确定调用者,从而实现“感知调用者(Caller Sensitive)”的行为,即根据调用类或调用栈中的其它类来调整其自身的行为。

JDK团队希望知道getCallerClass方法在应用程序中是如何使用的,能否修改这些代码使之不再依赖任何sun.* API。你可以加入OpenJDK core-dev-libs邮件列表来反馈意见。

多年来,Oracle一直在提醒开发者,调用sun.*包里面的方法是危险的。关于这点,读者可以阅读Oracle博客上的说明文章“为什么开发人员不应该调用‘sun’包”。总之,使用这些已弃用的特性很容易出问题。随着平台的变化,它们可能随时被转移、删除或者更改语义。

然而,如果你使用了感知调用者的行为,也无需失去信心。JDK增强提案(JEP176)呼吁提高JDK方法处理的实现的安全性,使用可以可靠地识别的感知调用者方法的机制代替现有的人工维护的方法列表。

继续关注该问题,可以访问Oracle Bug数据库

参考英文原文:Oracle Discontinuing sun.reflect.Reflection.getCallerClass


感谢马国耀对本文的审校。

转:Oracle弃用sun.reflect.Reflection.getCallerClass的更多相关文章

  1. java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy

    java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy at sun.reflect.an ...

  2. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    控制台包空指针后跟这个异常,是因为控制层调用service时的失败,无法读到sql,问题在于controller在引入的service没有自动装配,在引入多个service时,每个service都要自 ...

  3. sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    在使用Hibernate的J2EE项目中,莫名其妙出现如上错误,既不报错,也不运行不论什么输出測试代码,更不返回结果. 经过排查,在方法里面引用的实体类和其映射文件属性个数不一致. 改动一致后,即解决 ...

  4. sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class

    1.首先,问题出现的点是在泛型 我出现问题的原因是,和泛型有关系,要调整泛型 2.我把问题出现的过程描述一哈子 1.基础类 @tk.mybatis.mapper.annotation.Register ...

  5. Oracle JDK迁移指南

    Oracle JDK迁移指南 https://docs.oracle.com/en/java/javase/11/migrate/index.html#JSMIG-GUID-C25E2B1D-6C24 ...

  6. [Java 基础]sun.misc.Unsafe

    使用Unsafe可以干一些好事. Unsafe对象初始化 如果你的代码属于trusted的,可以直接使用下面的方式: public static Unsafe getUnsafe() { Class ...

  7. Java魔法类:sun.misc.Unsafe

    Unsafe类在jdk 源码的多个类中用到,这个类的提供了一些绕开JVM的更底层功能,基于它的实现可以提高效率.但是,它是一把双刃剑:正如它的名字所预示的那样,它是Unsafe的,它所分配的内存需要手 ...

  8. sun.misc.Unsafe 详解

    原文地址 译者:许巧辉 校对:梁海舰 Java是一门安全的编程语言,防止程序员犯很多愚蠢的错误,它们大部分是基于内存管理的.但是,有一种方式可以有意的执行一些不安全.容易犯错的操作,那就是使用Unsa ...

  9. Java Magic. Part 4: sun.misc.Unsafe

    Java Magic. Part 4: sun.misc.Unsafe @(Base)[JDK, Unsafe, magic, 黑魔法] 转载请写明:原文地址 系列文章: -Java Magic. P ...

随机推荐

  1. 关于配置Tomcat的URIEncoding

    遇到的问题: 程序需要发送http GET请求到服务器,请求的参数中包含了中文字符.程序中参数为UTF-8格式,且经过了UTF-8 URL编码再发送.使用的tomcat服务器,但服务器端后台程序中取到 ...

  2. nginx 红黑树详解

    1 介绍 这部分终于整理完了,太耗时间了,留下来备忘吧! 之前看STL源码时,只是研究了红黑树的插入部分.在stl源码剖析的书中,也没有涉及到删除操作的分析,这次对删除操作也进行了详细的研究, 并且还 ...

  3. Java IO整理

    参考博客:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html Java   IO体系结构 1.要弄清楚其体系结构,先明白 ...

  4. PHP和MySQL Web开发(原书第4版) 高清PDF+源代码

    PHP和MySQL Web开发(原书第4版) 高清PDF+源代码 [日期:2014-08-06] 来源:Linux社区  作者:Linux [字体:大 中 小]     内容简介 <PHP和My ...

  5. ip识别运用

    tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255 172.16.0.0/12:172.16.0.0-1 ...

  6. 在阿里云ECS(CentOS6.5)上安装ftp

    安装vsftpd 命令: yum install vsftpd –y 结果: 创建ftp存取文件的目录,用户名,密码 命令: useradd -d /home/ftp -g ftp -s /sbin/ ...

  7. html元素被隐藏在后面

    当有些html元素是由于某些控件生成的,然后它被隐藏在其他元素的后面,但是它一开始是隐藏的,你无法直接在html或js里修改它的属性:z-index,使其可以放在更前面,这时可以在css里重新定义控件 ...

  8. PHP文件夹操作2

    mkdir("路径文件名"); 创建文件夹 imdir("路径文件名"); 删除文件夹(只能删除空的文件夹) rename("路径",&qu ...

  9. mysql数据库中间件研究

    随着互联网的发展,数据量的不断增大. 单台实例已经远远无法满足业务的需要. 对数据库分库分表的需求不断的增加随之而来的就是数据库中间件的开发. 一. 单台实例主要面临下面几个问题: 1.  数据量太大 ...

  10. CSS重设(reset)

    在当今网页设计/开发实践中,使用CSS来为语义化的(X)HTML标记添加样式风格是重要的关键.在设计师们的梦想中都存在着这样的一个完美世界:所有的浏览器都能够理解和适用多有CSS规则,并且呈现相同的视 ...