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. 添加<!doctype html>后造成JS写的定位失效

    今天同事找了一个悬浮广告的插件,但是一放入页面中就失效了,也没有报错,后来通过原文件对比,发现是加了<!doctype html>. 这样子定位并不起效果: document.getEle ...

  2. 微信小程序实例教程(四)

    第八章:微信小程序分组开发与左滑功能实现   先来看看今天的整体思路: 进入分组管理页面 --> 点击新建分组新建 进入到未分组页面基本操作 进入到已建分组里面底部菜单栏操作 --> 从名 ...

  3. Jenkins启动、停止脚本

    1.jenkins下载地址:http://pan.baidu.com/s/1o79ZRzs 2.创建shell脚本,如:jenkins.sh #!/bin/bash pid=`ps -ef | gre ...

  4. Java笔记(二)

    10.   public protected default private 同一个类中 √ √ √ √ 同一个包中 √ √ √   子类 √ √     不同包中 √       11. 线程: s ...

  5. ARM-LINUX学习笔记-(虚拟机linux串口终端以及USB程序下载,基于TQ2440)

    昨天安装了ssh服务之后今天在windows上用xshell登陆发现登录不上,原因是使用了virtualbox的NAT模式,在NAT模式下,客户机可以很方便地上网,但是想要链接宿主机就需要打开网络地址 ...

  6. CABasicAnimation 基本动画

    几个可以用来实现热门APP应用PATH中menu效果的几个方法 +(CABasicAnimation *)opacityForever_Animation:(float)time //永久闪烁的动画 ...

  7. ZOJ 3923 Handshakes

    水题. 算一下每个人和之前的人握手次数+之后的人和这个人握手次数.取最大值. #include<cstdio> #include<cstring> #include<cm ...

  8. MQTT研究

    http://www.jianshu.com/collection/1c742515f8d8 http://blog.csdn.net/gaojq_ios/article/details/481597 ...

  9. AOP:代理思想 (没有考虑到Spring)

    文件目录: package com.wangcf.entity; public class User { private int id; private String name; private St ...

  10. XP Mode 虛擬機器 for Windows 7

    免驗證官方直接下載 官網 Download Windows Virtual PC XP Mode for Windows 7 性質 Windows 7 免費 / en 多國 繁體中文(Traditio ...