Kotlin - 类型别名 typealias

一、概念

就是另外取个名称,解决又臭又长的命名。可用于:类、泛型类、内部类、函数类型、泛型函数。格式:typealias 别名 = 原类型名,需要声明在顶层。

自 Kotlin v2.3,可以声明在类、接口、对象中,默认 private 限制在内部使用(可显式声明为 internal、public 使其能在外部被访问),作用域隔离避免顶层命名污染,因此可将基本数据类型改成更有意义的名称,如 private typealias BookName = String。

Kotlin 复制代码
​//之前:又臭又长
class YouChouYouChang{ fun show() = println("Hello") }
val ycyc = YouChouYouChang()
ycyc.show() //打印:Hello

//现在:取别名
typealias NewName = YouChouYouChang
val nn = NewName()
nn.show()   //打印:Hello

//类型强转无必要
println(nn is YouChouYouChang)  //打印:true
println(nn is NewName)          //打印:true

二、使用

2.1 基本使用

3.1.1 泛型类

Kotlin 复制代码
class Old<T, R>(param1: T, param2: R)
typealias New1 = Old<Int, String>
typealias New2<T> = Old<T, String>

val a = New1(3, "")
val b = New2("", "")

3.1.2 内部类

Kotlin 复制代码
class Outter {
    inner class Inner {}
}
typealias AA = Outter.Inner

val in1 = out.Inner()
val in2 = out.AA()

3.1.3 函数类型

Kotlin 复制代码
fun old(function: (Int, String) -> Unit, num: Int, name: String) {}
typealias new = (Int, String) -> Unit
fun new(function: new, num: Int, name: String) {}

3.1.4 泛型函数

Kotlin 复制代码
typealias new2<T, R> = (T, R) -> Unit
fun <T, R> new2(function: new2<T, R>, param1: T, param2: R) {}

2.2 嵌套类型别名(Nested Type Aliases)

kotlin v2.3.0 支持。

Kotlin 复制代码
typealias UserId = String
typealias ProductId = String

typealias UserProducts = Map<UserId, List<ProductId>>
typealias UserProductsCallback = (UserProducts) -> String

fun getUserProducts(callback: UserProductsCallback) {
    val products = mapOf(
        "张三" to listOf("车", "房"),
        "李四" to listOf("电视", "手机")
    )
    callback(products)
}
相关推荐
Enaium6 分钟前
我实现了KMP的SDL绑定并编写了高性能软光追
前端·kotlin
杉氧12 分钟前
原生交互:如何在 Flutter 中嵌入 Android/iOS 原生组件并解决手势冲突
android·flutter·dart
Android打工仔29 分钟前
Continuation 的链式关系 —— 一个 suspend 函数如何把结果交还给调用者?
android·kotlin
hunterandroid29 分钟前
[Android 从零到一] Kotlin Channel 与复杂并发场景:从生产者-消费者到结构化并发治理
android
FlightYe1 小时前
linux系统编程(八):阻塞与非阻塞IO对比
android·linux·运维·服务器·github·vim
恋猫de小郭1 小时前
Flutter iOS Deep Link 为什么会突然失效:一系列难以言喻的问题
android·前端·flutter
Kapaseker2 小时前
小白都看得懂的 Skill 教程 - 初识 Skill
android·kotlin·vibecoding
神奇小梵2 小时前
安全和开发的需要了解的知识————下载内容的安全,和下载内容如何运行
android·windows·安全·个人开发
2501_915909062 小时前
iOS 证书创建与管理 类型限制 p12 密码与云备份实操
android·ios·小程序·https·uni-app·iphone·webview
黄毛火烧雪下3 小时前
Service 推送 / Stub·Proxy 对调
android