Kotlin 值类(Value Class)

news/2024/9/23 20:21:42/

在 Java 中,像 IntegerDouble 等都是 包装类,都需要创建对象 装箱 数值。
很显然 创建对象是 消耗额外内存的,而 对于优化这种问题,Kotlin 引入了 value class,尽量避免装箱和脱箱。

一、声明语法

kotlin">@JvmInline
value class XXX(val value: Type)

使用 和 正常类,没有区别。

Jetpet Compose 中,Dp 就是典型的value class应用:

kotlin">@JvmInline
value class Dp(val value: Float)

二、JVM实现分析

说明: value class 会(尽可能)避免创建包装类对象,而是直接使用 基本数据类型。而 对应的类成员方法 以 类静态方法 传入 value 值 来实现执行。

这里定义 尺寸 Pt 单位为例:

kotlin">@JvmInline
value class Pt(private val value: Int) {fun print() {println("pt: $value")}
}fun main() {val pt = Pt(10)pt.print()
}

通过 Show Kotlin Bytecode -> Decompile 得到:

public final class Pt {private final int value;// print 转成了 静态方法public static final void print_impl(int arg0) {String var1 = "pt: " + arg0;System.out.println(var1);}
}public final class MainKt {public static final void main() {// 优化成 基本类型 int,不需要 装箱int pt = Pt.constructor-impl(10);// 而 直接调用Pt.print-impl(pt);}// $FF: synthetic methodpublic static void main(String[] args) {main();}}

说明: 上面说到 尽可能 创建和使用 包装对象,但是 当 Pt? 这种可空的时候,就会使用 包装类 传递参数。

简单举例,创建 Pt 为参数的方法:

kotlin">// 编译 成 java 则是 testPt(int pt)
fun testPt(pt: Pt) // 而 下面 则编译成 testPt(@Nullable Pt pt)
fun testPt(pt: Pt?) 

文档

  • Inline value classes
  • Design Notes on Kotlin Value Classes

http://www.ppmy.cn/news/1508849.html

相关文章

【JavaEE初阶】文件操作和IO

目录 🌴认识文件 🚩树型结构组织和目录 🚩文件路径(Path) 🚩 文件分类 🎍Java 中操作文件 🚩 File 概述: 📌属性 📌构造方法 &#x1f4c…

气膜建筑的抗风与防火性能:保障仓储的安全—轻空间

气膜建筑以其独特的结构和材料优势,为仓储设施提供了可靠的安全保障。在应对自然灾害特别是强风和火灾时,气膜建筑展示了优异的抗风和防火性能。轻空间将详细探讨这些性能及其在实际应用中的表现。 气膜建筑的抗风能力源于其特殊的结构设计和高性能材料。…

【面试宝典】多线程

一、线程和进程的区别? 进程和线程是操作系统中的两个重要概念,它们之间存在着明显的区别。以下是对进程和线程区别的详细阐述: 1、定义与基本单位 进程(Process):进程是计算机中的程序关于某数据集合上…

【解压即玩】PC端最好用最漂亮的前端CoinOPS整合包186G 复古带遮罩和滤镜,怀旧拉满

这是大神做的一个整合包,让游戏界面更加的漂亮,如图,下面是游戏选择画面,右侧是滚动的圆盘,左侧显示游戏的画面: 实际游戏时的界面是这样的: 应当是目前最漂亮的游戏界面了。之前有人说在电脑上…

白骑士的Matlab教学实战项目篇 4.4 机器学习与AI

系列目录 上一篇:白骑士的Matlab教学实战项目篇 4.3 控制系统设计 机器学习与人工智能(AI)是当前技术发展的前沿领域,通过数据驱动的模型和算法,可以解决许多复杂的问题。MATLAB 提供了丰富的工具和函数,支…

Python办公自动化:使用`xlutils` 修改Excel文档

在日常办公自动化中,除了读取Excel文件,我们还经常需要对文件进行修改或更新。在Python中,除了xlrd,还可以使用xlutils库来实现对Excel文件的修改操作。本文将继续以“巴黎奥运会奖牌榜.xlsx”文件为例,讲解如何使用xl…

14.1 NumPy基础

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

⌈ 传知代码 ⌋ 基于ROS的气体浓度建图

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…