linux暗转旧版java_Java旧版不断发展

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> []的类型保证。

59539500

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言和指针的本质是什么?技术大神给出答案

很多编程语言都以 “没有指针” 作为自己的优势来宣传&#xff0c;然而&#xff0c;对于C语言&#xff0c;指针却是与生俱来的。那么&#xff0c;什么是指针&#xff0c;为什么大家都想避开指针。很简单&#xff0c; 指针就是地址&#xff0c;当一个地址作为一个变量存在时&…

fastdfs的tracker启动之后一直选举_jraft选举策略

一、角色划分Follower&#xff1a;完全被动&#xff0c;不能发送任何请求&#xff0c;只接受并响应来自leader 和 candidate 的 message&#xff0c;每个节点启动后的初始状态一定是follower&#xff1b;Leader&#xff1a;处理所有来自客户端的请求&#xff0c;以及复制 log到…

C语言 | 二维数组

C语言二维数组的定义一般形式 类型说明符 数组名[常量表达式][常量表达式]int a[10][6],b[3][4];用矩阵形式表示二维数组&#xff0c;是逻辑上的概念&#xff0c;能形象地表示出行列关系&#xff0c;而在内存中&#xff0c;各元素是连续存放的&#xff0c;不是二维的&#xff0…

C语言 | 一维数组

C语言一维数组的定义一般形式类型符 数组名[常量表达式]C语言使用一维数组注意事项数组名的命名规则和变量名相同&#xff0c;遵循标识符命名规则。在定义数组时&#xff0c;需要指定数组中元素的个数&#xff0c;方括号中的常量表达式用来表示元素的个数&#xff0c;即数组长度…

怎样删去csv中重复行_4个锦囊,祝你快速删去Excel中的重复数据

快速删去重复数据&#xff0c;雷哥在这里提供4种超简单的解决方法&#xff0c;大家一看就会。为了更加直接明了地说明&#xff0c;雷哥在这里通过具体案例进行讲解。案例&#xff1a;下图B列日期中&#xff0c;橘黄色部分是我们已经标记好颜色的重复项。要求&#xff1a;快速删…

C语言通过printf()设置输出显示方式

在调试程序时多数情况下要输出很多提示信息&#xff0c;通过控制输出字体的颜色的显示方式可以方便我们快速查看有用的信息&#xff0c;而printf()的终端转义就为我们提供了这样的手段。我们大家知道在程序结尾加上\n就可在输出的时候换行&#xff0c;其实这就是个转义字符。而…

如何取消计算机阻止安装程序,Win10电脑安装软件提示“你必须取消阻止该发布者才能运行此软件”怎么办...

&#xfeff;我们在使用win10系统的时候&#xff0c;都会在电脑中安装各种各样的软件&#xff0c;但是有时候在安装软件的还是&#xff0c;会遇到一些提示&#xff0c;比如“你必须取消阻止该发布者才能运行此软件”&#xff0c;导致安装软件失败&#xff0c;这该怎么办呢&…

perl大骆驼和小骆驼_快速的骆驼和云消息传递

perl大骆驼和小骆驼Apache Camel是一个流行的&#xff0c;成熟的开源集成库。 它实现了企业集成模式 &#xff0c;这是在集成分布式系统时经常出现的一组模式。 过去&#xff0c;我写过很多关于Camel的文章&#xff0c; 包括为什么我比Spring Integration更喜欢它 &#xff0c;…

mvc 事务层切换数据源_Mvc 与 Flux 与 Redux的一些思考

MVC模型 解决问题以及不足解决问题为了解决业务逻辑和界面渲染逻混在一起 MVC流程图2. 不足由于 Model 对外直接暴露了 set 和 on 方法&#xff0c;导致 View 层可以随意改变 Model 中的值&#xff0c;也可以随意监听 Model 中值的变化。这样的设定最终会导致一个庞大的 Model …

计算机语言缺省,揭秘物联网必学语言——C语言与C++的区别

C语言虽说经常和C在一起被大家提起&#xff0c;但可千万不要以为它们是一个东西。有很多人会有这样的疑问&#xff1a;C语言和C有什么区别呢&#xff1f;C是在C语言的基础上发展来的&#xff0c;但是并不是C比C语言高级&#xff0c;两者的编程思想不一样&#xff0c;应用的领域…

C/C 语言printf()

1.调用格式为 printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, 用来确定输出内容格式。参量表是需要输出的一…

公路多孔箱涵设计_【公路常识中篇】公路路基边坡滑坡防护设计和预防

【公路常识中篇】公路路基边坡滑坡防护设计和预防来源&#xff1a;网络 公路路基基本知识&#xff0e;内容包括&#xff1a;公路路床&#xff1b;公路路堤&#xff1b;公路路基压实&#xff1b;影响公路路基稳定因素&#xff1b;公路路堑&#xff1b;公路路基沉陷&#xff1b;公…

按照计算机系统结构分类存储器可分为,存储器分类,存储器的分级结构

描述1、存储器概述存储器是计算机系统中的记忆设备&#xff0c;用来存放程序和数据。构成存储器的存储介质&#xff0c;目前主要采用半导体器件和磁性材料。存储器中最小的存储单位就是一个双稳态半导体电路或一个CMOS晶体管或磁性材料的存储元&#xff0c;它可存储一个二进制代…

spark 流式计算_流式传输大数据:Storm,Spark和Samza

spark 流式计算有许多分布式计算系统可以实时或近实时处理大数据。 本文将从对三个Apache框架的简短描述开始&#xff0c;并试图对它们之间的某些相似之处和不同之处提供一个快速的高级概述。 阿帕奇风暴 在风暴 &#xff0c;你设计要求的T opology实时计算的图&#xff0c;然…

嵌入式开发C语言中的uint8_t

在嵌入式开发中的C语言代码中&#xff0c;经常可以看到类似uint8_t、uint16_t、uint32_t、uint64_t这种数据类型&#xff0c;在教材中却从来没见过。实际上这些数据类型都是某种数据类型的别名。比如&#xff0c;在定义函数时用到了uint8_t。右键“uint8_t”&#xff0c;单击“…

多模态语义分析_情感分析、多模态NLP、多语言翻译...这场NLP知识盛宴不可错过!...

AI科技评论按&#xff1a;2020年12月20日&#xff0c;由中国计算机学会自然语言处理专业委员会(CCF-NLP)发起&#xff0c;联合AI研习社及各个知名高校开展的“CCF-NLP走进高校”系列高校NLP研究分享报告会第六期——华中师范大学站&#xff0c;通过线上会议直播的方式进行。本期…

电瓶车续航测试软件,重点看续航 测试2020款蔚来ES8 485KM

时间回到2019年12月28日&#xff0c;一场隆重的“NIO DAY 2019”在深圳举行&#xff0c;2020款ES8便是在那场大秀中首次亮相。5个月之后&#xff0c;2020款蔚来ES8已于4月19日正式开始交付&#xff0c;我们也在交付之日对新车进行了试驾体验。所以今天就不多废话了&#xff0c;…

海盗云商插件_推销自己的海盗猫王运营商

海盗云商插件因此&#xff0c;Java没有Elvis运算符&#xff08;或者&#xff0c;更正式地讲&#xff0c;它没有null合并运算符或null安全成员选择&#xff09;……虽然我个人不太在意它&#xff0c;但有些人似乎很喜欢它。 当一位同事需要几天后&#xff0c;我坐下来探讨了我们…

英文期刊催稿信模板_手把手教你写投稿信,另附查尔斯沃思高质量模板

导语本文是查尔斯沃思作者服务关于学术论文写作系列文章的最后一篇&#xff0c;我们邀请英国编辑团队资深成员&#xff0c;根据其自身丰富的撰稿经验&#xff0c;为中国作者呈现系统全面的写作指导建议&#xff0c;我们将其翻译成中文&#xff0c;方便大家理解。希望本系列文章…

63权限提升-Linux脏牛内核漏洞SUID信息收集

今天讲到的方法是suid和内核漏洞 案例一Linux 提权自动化脚本利用-4 个脚本 两个信息收集&#xff1a;LinEnum、linuxprivchecker 两个漏洞探针&#xff1a;linux-exploit-suggester、linux-exploit-suggester2 信息收集有什么用&#xff1f; 信息收集就能判断能否进行s…