AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

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

关注

评论

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

SvelteKit 最新中文文档教程(21)—— 最佳实践之图片

冴羽

前端 前端框架 React Svelte SvelteKit

Arthas watch (方法执行数据观测)

刘大猫

Arthas 图像处理 图像分割 光学成像 光电成像技术

做Docx预览,一定要做这个神库!!

Immerse

Vue 前端 docx 文件预览

坐标上海,20~40K的面试强度

王中阳Go

Go 面经 上海

GreatSQL启动崩溃:jemalloc依赖缺失问题排查

GreatSQL

阿里云 Elasticsearch Serverless 检索增强型 8.17 版来袭!

阿里云大数据AI技术

大数据 elasticsearch 阿里云 Serverless 向量检索

关税冲击下,全球AI向何处去?

脑极体

AI

生成式 AI 在电商评论场景的应用 : 场景分析和技术选型

亚马逊云科技 (Amazon Web Services)

StarRocks Community Monthly Newsletter (Mar)

StarRocks

OLAP 存算分离架构 StarRocks 湖仓一体 数据库 大数据

zk源码—会话的实现原理

电子尖叫食人鱼

Java

勒索软件介绍

天翼云开发者社区

勒索攻击

出版社资源管理系统的开发

北京木奇移动技术有限公司

软件外包公司 教学资源网 资源管理系统

全面了解如何删除Mac启动台(Launchpad)的无效图标,Mac软件卸载后残留图标无法卸载的解决方法

阿拉灯神丁

mac系统清理优化软件 应用程序卸载 程序坞图标删除软件 CleanMyMac X中文版 卸载清理软件

《Operating System Concepts》阅读笔记:p733-p734

codists

1688代采系统功能深度解析:如何通过自动采集商品详情数据API接口实现高效运营

代码忍者

1688代采集运系统

MES助力电线电缆行业生产:从质量管控到追溯管理

万界星空科技

mes 电线电缆行业 制造业工厂 电线电缆mes 生产管理MES系统

AI智上 | 用友凭借AI之力,绘财务数智化新蓝图

用友智能财务

在亚马逊云科技环境上基于 Dify Agent 快速部署 text2SQL 智能数据分析助手

亚马逊云科技 (Amazon Web Services)

出版社资源管理系统的主要功能

北京木奇移动技术有限公司

软件外包公司 出版社 教学资源网

赋能能源 | 智慧数据,构建更高效智能的储能管理系统

KaiwuDB

数据库 kwdb

如何与Cursor结对编程?

RockBot

AI技术实践 cursor

Edge 浏览器推出 Copilot Vision:免费实时解析屏幕内容;Aqua Voice:极速 AI 语音输入工具丨日报

声网

云备份技术解析:备份删除&合并原理

天翼云开发者社区

云备份

AI+代理IP手把手教你爬取某度

袁袁袁袁满

AI 代理IP 免费代理ip Python爬虫 爬虫实战

汽车上云的不可逆之路

脑洞汽车

AI

出版社资源管理系统的技术架构

北京木奇移动技术有限公司

出版社 教学资源网 资源管理系统

京东3D空间视频生成技术探索与应用

京东零售技术

[方案讨论]怎么把大量电话号码批量导入手机通讯录,联系人号码导入苹果iphone华为小米等手机

一码平川

三句话搞定周末出行攻略!我用 AI 生成一日游可视化页面,还能秒上线!

陈明勇

MCP

阿里云OSS应对DDoS攻击策略

网络安全服务

阿里云 CDN 域名解析 DDoS DDoS 攻击

促销系统:促销活动、优惠券、优惠规则概念模型设计

量贩潮汐·WholesaleTide

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