【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

解密 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:034346
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

【TUG 话题探讨003】TUG 专家们如何做 TiDB 性能调优

TiDB 社区干货传送门

同城双中心自适应同步方案 —— DR Auto-Sync 详解

TiDB 社区干货传送门

TiCDC使用心得

TiDB 社区干货传送门

记一次 Lightning 导入失败导致的 TiDB 集群重启失败事故处理

TiDB 社区干货传送门

TiFlash 5.x 与 4.x 对比测试

TiDB 社区干货传送门

TiDB 整体架构

TiDB 社区干货传送门

TiDB v4.0.12 VS v5.0.0 insert 性能对比

TiDB 社区干货传送门

TiKV 源码略读 - Server Start

TiDB 社区干货传送门

TiDB 5.0 升级性能初体验

TiDB 社区干货传送门

在Windows下调试TiDB4PG的填坑实记

TiDB 社区干货传送门

如何使用 minio 进行 BR 备份

TiDB 社区干货传送门

带着问题读 TiDB 源码:Hive 元数据使用 TiDB 启动报错

TiDB 社区干货传送门

How WebAssembly Powers Database: Build a UDF engine with Wasm

TiDB 社区干货传送门

做出让人爱不释手的基础软件:可观测性和可交互性

TiDB 社区干货传送门

docker方式部署的tidb-v3.0扩容缩容pd节点后需要滚动升级整个集群

TiDB 社区干货传送门

通过label调度副本测试

TiDB 社区干货传送门

【TUG 话题探讨001】TiDB 的应用场景有哪些?看看 TUG 的技术专家怎么说

TiDB 社区干货传送门

【TUG 话题探讨002】看看 TUG 的技术专家都在用哪些数据库?

TiDB 社区干货传送门

使用 TiDB 时的连接池和负载均衡器配置策略

TiDB 社区干货传送门

Raft 算法浅析

TiDB 社区干货传送门

使用MySQL Workbench 迁移SQL Server 2012数据库到TiDB 5.0

TiDB 社区干货传送门

TiDB 常⻅架构应⽤场景

TiDB 社区干货传送门

TiDB GC 之监控及日志解读

TiDB 社区干货传送门

TiDB GC 之处理案例 & FAQ

TiDB 社区干货传送门

升级5.1.1小问题

TiDB 社区干货传送门

【TiDB 社区版主推荐阅读】SQL 窗口函数速查表

TiDB 社区干货传送门

【TiDB 社区版主话题探讨】-深入讨论 BR 备份

TiDB 社区干货传送门

【 AskTUG 每周精选】 SOP 系列问题拆解合集

TiDB 社区干货传送门

TiCDC 实现 TiDB 备份方案

TiDB 社区干货传送门

【TUG 话题探讨004】对 TiDB 的爱恨之情!

TiDB 社区干货传送门

YiDB在翼支付账单业务的应用实践

TiDB 社区干货传送门

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