linux暗转旧版java

最近,我偶然发现了JDK API的一个非常有趣的警告,即Class.getConstructors()方法。 它的方法签名是这样的:

Constructor<?>[] getConstructors()

有趣的是, Class.getConstructor(Class...)返回一个Constructor<T> ,并保持了<T>

Constructor<T> getConstructor(Class<?>... parameterTypes)

为什么会有区别,即为什么第一个方法不返回Constructor<T>[]

让我们考虑一下Javadoc:

请注意,尽管此方法返回一个Constructor <T>对象的数组(也就是此类的构造函数的数组),但此方法的返回类型为Constructor <?> [],而不是Constructor <T> []。预期。 这种信息量较少的返回类型是必需的,因为从此方法返回后,可以修改该数组以容纳不同类的Constructor对象,这将违反Constructor <T> []的类型保证。

这是一个艰难的过程。 从历史上看,这是怎么发生的:

Java 1.0 / Oak:数组

在Java 1.0( Oak编程语言的直接继承者)中,已经引入了数组。 实际上,它们是在Java 1.2中引入的collections API之前引入的。 数组遭受了我们今天所知道的所有问题,包括它们的协变,这在运行时导致了很多问题,这些问题在编译时无法检查:

Object[] objects = new String[1];
objects[0] = Integer.valueOf(1); // Ouch

Java 1.1:反射API

缺少“不错的” collection API, Class.getConstructors()方法唯一可能的返回类型是Constructor[] 。 当时的合理决定。 当然,您可能会犯上述相同的错误:

Object[] objects = String.class.getConstructors();
objects[0] = Integer.valueOf(1); // Ouch

但是除了上述内容之外,您还可以正确地编写以下代码:

Constructor[] constructors  = String.class.getConstructors();
constructors[0] = Object.class.getConstructor();// Muahahahahahahaha

Java 1.2:Collections API

从早期开始,Java就一直向后兼容,甚至从Oak开始。 到目前为止,在这个Stack Overflow问题中,关于Oak的一些向后兼容性已泄漏到Java中,这是一个非常有趣的历史研究。

虽然使用集合来设计反射API是很自然的,但现在已经为时已晚。 更好的解决方案可能是:

List getConstructors()

但是,请注意,我们还没有泛型,因此数组实际传达的类型信息比集合多。

Java 1.5:泛型

在Java 5中,

Constructor[] getConstructors()

Constructor<?>[] getConstructors()

由于上述原因而做出的。 现在,使用集合的替代API肯定会更好:

List<Constructor<T>> getConstructors()

但是船开了。

Java,丑陋的疣

Java充满了这些小警告。 它们全部记录在Javadocs中,并且经常在Stack Overflow中记录。 就在昨天,我们在MapConcurrentHashMap记录了与全新API有关的新警告 。

“管理权:发人深省的部分”,关于所有这些警告以及Brian Goetz维护这些警告有多么困难的一个很好的演讲可以在这里看到:

演讲摘要:

语言设计师谈论他们正在设计的语言时

翻译自: https://www.javacodegeeks.com/2015/03/the-java-legacy-is-constantly-growing.html

linux暗转旧版java

linux暗转旧版java_Java旧版不断发展相关推荐

  1. 旧版java_Java旧版本清理|JavaRa旧版本清理下载_V2.4 官方版_9号软件下载

    JavaRa 是一款非常实用的Java旧版清理工具,可以帮你检查目前系统安装的 Java 是否为最新版本,并且自动移除最新版本以外的所有旧版本,让这些旧版可以不要再占据硬盘的空间了. 软件特点: 1. ...

  2. 小马哥----高仿HTC D816刷机拆机主板图与开机界面图 6582芯片1:1精仿 分新旧 移动版与联通版分别

    高仿htc d816机型 6582芯片 TH55主板型号 14版与15版资料不通用  新版刷旧版开机定屏幕反复重启 具体拆机看主板标示贴或者进入工程模式对比基带版本来确定机型 上图

  3. 万字长文!Unix和Linux你不知道的那些历史(详解版)

    作者 | 程序员小乐 来源 | 程序员小乐(ID:study_tech) 00 前言    UNIX 与 Linux 之间的关系是一个很有意思的话题.在目前主流的服务器端操作系统中,UNIX 诞生于 ...

  4. 万字长文!Unix 和 Linux 你不知道的那些历史(详解版)

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Everyone would get tired.Nobody can ta ...

  5. :linux内核编译过程的最终总结版

    参考了linuxsir和水母的linux版的精华区,本人不保留任何版权. 经过归纳整理,看看上面的就可以了,包括补丁如何打.具体的一些选项可以往下看,一些一看就懂的白痴选项,并没有选进来,因此适合对电 ...

  6. linux内核支持硬盘,Intel 10nm桌面版还是来了:Linux内核已支持

    Intel 10nm工艺处理器目前仅用于笔记本移动平台,而且只有U系列低功耗版.Y系列超低功耗版,甚至在此领域仍需要14nm产品来作为补充,再加上Ice Lake处理器频率偏低,初代10nm Cann ...

  7. linux命令后缀-d和 都表示后台启动,Linux复习材料_关宇亮整理版.doc

    Linux复习材料_关宇亮整理版 Linux目录 第1章1.Linux的内核版与发行版的区别2.2个开发标准规范 4.常见的Linux发行版 5.Unix与Linux的关系与区别 6.Linux的特性 ...

  8. Linux下安装nginx (tar解压版安装) nginx1.16.1

    https://blog.csdn.net/qq_40431100/article/details/104729504 Linux下安装nginx (tar解压版安装) nginx1.16.1 Jkc ...

  9. Linux学习之嵌入式Linux编程文件IO(C语言版)

    Linux学习之嵌入式Linux编程文件IO(C语言版) 一.文件IO常用函数 1.open 2.write 3.read 示例代码: #include <sys/types.h> #in ...

最新文章

  1. 2013计算机大纲,2013计算机应用基础考试大纲
  2. 1231 sqlserver_sqlserver 删除表中 指定字符串
  3. jquery元素节点操作
  4. docker 安装azkaban_azkaban安装
  5. 到底ResNet在解决一个什么问题呢?知乎热门回答
  6. SaaS市场增长迅速 企业借CRM消灭管理黑洞
  7. 坐标系对应EPSG代号、经度范围、中央经线
  8. 【转载】三方框架整理
  9. SEO网站优化注意5个小细节,降低网站跳出率
  10. Verilog语言基础
  11. 初出茅庐的小李第73篇博客之offsetof(type, member-designator)使用
  12. 为什么深圳成指关注度远远小于上证指数?
  13. 御坂坂的C++学习之路(1)
  14. pip install av 无法安装
  15. win7 不显示图片缩略图(解决方法)
  16. 关于Java反射获取静态属性值的方式
  17. PHP5.4 如何连接MS Sql Server
  18. java 读取dwg_jdwglib java dwg文件的读取,写入开发包. dwg使用当前 常方便,测试代码和jar都有 CAD 247万源代码下载- www.pudn.com...
  19. 手把手教你设计机器视觉系统
  20. 屏幕下雪特效的jQuery实现

热门文章

  1. jzoj3339-[NOI2013模拟]wyl8899和法法塔的游戏【博弈论,暴力】
  2. E - Rotate and Flip(线性代数矩阵坐标变换)
  3. 【dfs】家族(jzoj 1985)
  4. GYM101933I - Intergalactic Bidding
  5. 动态规划训练8 [E - Multiplication Puzzle POJ1651]
  6. Lombok的@Data生成的hashCode和equals方法坑
  7. 跟我学 Java 8 新特性之 Stream 流(五)映射
  8. 面试官最爱问的并发问题
  9. 如何在MyEclipse中显示行数
  10. 小程序如何将wx.request里的数据传出去