java中为什么设计包装类_为什么Java中的包装类是最终的?

有充分的理由使原始包装最终.

首先,请注意这些类在语言本身中得到特殊处理 – 与任何普通类不同,这些类被编译器识别为实现自动(非)装箱.简单地允许子类就已经造成了陷阱(展开子类,执行算术和回退会改变类型).

此外,包装器类型可以具有共享实例(例如,查看Integer.valueOf(int)),要求包装器的实例严格不可变.允许子类会打开一堆无法再保证不变性的蠕虫,迫使强大的代码被编写,好像包装器是可变的,导致防御性拷贝,浪费内存和CPU时间,并且还会产生问题,因为它们在多个方面有用.线程场景.

本质:包装类型需要是不可变的,以确保所有实例的统一功能;不可变性是他们已知财产的重要组成部分.为了保证不变性,类型需要是最终的.

如果您需要添加功能,请将其实现为实用程序类,就像对基元一样(例如,参见java.lang.Math).

编辑:为了解决“不需要类”的情况,必须最终确保不变性.严格来说,这是真的,包装器可以设计为非最终类,只是使所有方法都是最终的.这将缓解大部分陷阱,但它导致另一个问题:与新Java版本的兼容性.想象一下,您决定使用新方法创建自己的子类型MyInteger,例如: “整数减量()”.一切正常,直到……在Java 20中,语言设计者决定向API添加一个减量()方法(如上所述,这将是最终的). Bam,你的类不再加载,因为它试图覆盖最终方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值