时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

解密 Java 增强的泛型

  • 2015-01-06
  • 本文字数:1082 字

    阅读完需:约 4 分钟

尽管 Java 8 是 2014 年年初才发布的,而 Java 9 要等到 2016 年年中,但是目前有一些计划放到某个未来版本(希望是 Java 10)中的特性已经合并了进来。

具体而言,有两个比较大的特性已经开始原型设计了,它们是增强的泛型(Enhanced Generics)和值类型(Value Types)。有了增强的泛型,Java 开发者可以编写像 List这样的代码,省去了对基本类型进行装箱的痛苦。新的泛型提案有些地方比较模糊(或者说微妙),需要细心处理,具体见 Brian Goetz 在最近的设计文章中的解释。

Java 一直在关注向后兼容,在 Oracle 的管理下,这一点也得到再次确认。为此,Oracle 在寻求一种与 Java 5 中引入的泛型类似的策略,渐进地迁移。

需要克服的基本设计问题是,Java 的类型系统没有一个统一的根。Java 中没有这样的类型,既是 Object 的子类,又是 int 的子类。从 JVM 字节码的结构也可以看出,很明显从方法返回一个 int 和返回一个对象用的是不同的操作码(opcode)——ireturn 和 areturn 是不一样的。

目前的原型使用了一种叫做“any”类型变量的方式,用以指示既可以是引用类型,又可以是基本类型的类型变量(还包括新提议的值类型)。目前写作 Container,但是在该特性真正交付之前,语法还会改变。

目前的想法是,List和List在运行时将继续使用List.class 表示(因此对于引用类型,将继续存在类型擦除),List则会用与之不同的运行时类型表示(可能会用不同的class 文件)。这种方式被称作基本类型的“泛型特化”。此举还可以给另一个设计问题带来帮助,那就是升级现有的集合类,使用增强的泛型。支持开发者使用List是一个主要的设计目标,从现有的泛型类型,到未来版本中支持任何类型变量的泛型类型,应该可以迁移过去。

关于增强的泛型如何适应类型系统,还有些令人感觉奇怪的地方。比如,List不是List 类型的子类型(如果是的话,这就意味着List可以存储Object 的实例)。然而, List是List 的子类型,所以这意味着List不是List的子类型,通配符就无法应用于增强的泛型。

目前的原型离真正产品化还差得远,还有很多设计和实现工作要做。特化的实现正在积极进行。自动生成特化代码更为可取(减少手工编写样板代码),但这可能需要在字节码和类加载子系统中提供额外的支持。还有一个非常有趣的可能性,就是在虚拟机层面引入一个元编程设施(不是Java 语言层面的直接支持)。用invokedynamic 类比,这种方式可以称为“classdynamic”,可以参见这里的描述。

增强的泛型和值类型的开发都是通过 Project Valhalla 管理的,更多细节可以参见该项目。

查看英文原文: Under The Hood With A Prototype of Enhanced Generics for Java

2015-01-06 02:034912
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 148.7 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

2021Android面试笔试总结!html5移动开发即学即用网盘

android 程序员 移动开发

金九银十,面试必备!耗时一周整理的牛客网上最火Java面试八股文

Java 程序员 架构 面试 大厂

第 21 章 -《Linux 一学就会》- 结构化命令case和for、while循环

学神来啦

翻车了,字节一道 Fragment面试题

小松漫步

面试 大厂面试 Android;

付费云存储,微信的登云梯还是蜀道难?

海比研究院

云存储

10天拿到腾讯Android岗offer,内容太过真实

android 程序员 移动开发

架构设计第一周学习总结

周文

总结思考

会计CRM系统软件提高公司管理效率

低代码小观

企业 企业管理 管理会计综合实训平台 CRM 管理系统

腾讯云,五轮面试,六个小时,灵魂拷问,含泪拿下 60W offer

进击的王小二

java面试 大厂面试 java

每秒创建百万文件,百度沧海·文件存储CFS推出新一代Namespace架构

百度大脑

人工智能

2021Android进阶学习资料,动脑学院vip课程百度云

android 程序员 移动开发

DeFi平台挖矿系统需求开发(现成案例)

阿里云正式开源PolarDB-X数据库,壮大云原生分布式数据库生态

Lily

QCon看点|亚马逊云科技可持续软件工程实践分享

亚马逊云科技 (Amazon Web Services)

软件工程 S3 云端

Week 1命题作业

小朱

架构实战营

阿里云隐私增强计算产品DataTrust助力产业间实现数据价值高效协同

Lily

阿里云多个智物新品集体出道,持续加速产业智能化

Lily

数实融合·绽放新机,Techo Day技术回响日邀您“云相聚”

腾讯云数据库

数据库 tdsql

官方线索|把梦想当作热爱,用技术创造价值!

搬砖人

1024我在现场

达摩院求解器升级 覆盖黑盒优化难题

Lily

Android架构之网络优化

轻口味

android 10月月更

docker 安装kafka

大可大大大

老凡尔赛了!当亚马逊云科技大佬“转行”讲起脱口秀

亚马逊云科技 (Amazon Web Services)

数字化转型 设计师

DeFi去中心化DAPP系统软件开发案例(现成)

2021Android大厂面试题来袭,Android性能优化推荐书

android 程序员 移动开发

SimpleDateFormat线程不安全了?这里有5种解决方案

华为云开发者联盟

安全 线程 变量 SimpleDateFormat

收藏!490家专精特新数智企业全名单:听听“小巨人”企业怎么说?

海比研究院

阿里云混合云Apsara Stack 2.0发布,加速政企数智创新

架构 操作系统 公有云 科技

纵观移动云对象存储发展历程,也少不了 Apache APISIX 的能力加持

API7.ai 技术团队

API网关 企业案例 移动云 Apache APISIX

模块一作业

周文

「架构实战营」

同为aPaaS平台,华为云开天aPaaS与AppCube有何不同?

海比研究院

aPaaS

解密Java增强的泛型_Java_Ben Evans_InfoQ精选文章