java - kotlin 中的数据类和内联类有什么区别?
问题描述
在kotlin 1.5.0中,我们已经看到了inline class
withvalue
声明,但这似乎类似于,data class
除了我们只能在其中创建一个变量,inline class
而在data class
我们可以创建更多变量。
但我仍然想知道这是什么想法inline class
?或者我们能做什么inline class
和不能做data class
什么?
解决方案
内联类就是将一个类型包装在一个新类中。它更像是类型别名,但它也为我们提供了类型别名所不具备的类型安全性。内联类被替换为 java 代码中的底层数据类型。
这篇文章对内联类和一些陷阱提供了很好的见解:Inline Classes and Autoboxing in Kotlin
另一方面,如果该类被设计为仅保存某些数据,那么数据类可能是一个不错的选择,
data class User(val name: String, val followersCount: Int){}
然后该类会自动为我们提供一些默认方法。
val user = User("Youn", 5000)
// a default toString() method is implemented
println(user) // User(name=Youn, followersCount=5000)
// this is known as destructuring
// provided by the default componentN() function
val (name, followersCount) = User("Tivoli", 5)
// type of *name* is inferred to *String* and *followersCount* to *Int*
// name = Tivoli, followersCount = 5
此外,数据类中还提供了equals()
和的默认实现。copy()
查看更多:数据类 Kotlinlang 文档
推荐阅读
- r - R:创建具有阳性测试结果的频率表
- android - 如何让我的应用程序将从 android 设备上卸载
- azcopy - 如何使用 azcopy 版本 10.3.0 使用 powershell 将文件从 Blob 存储复制然后删除到 VM
- php - 如何在用户上次登录时订购帖子?
- spring - 控制建议如何捕获异常
- python - Python使用循环来制作公式
- python-3.x - How to extract data to a file using scrapy?
- java - Thymeleaf: display global errors by error code
- php - How to correctly construct a SOAP request to use in __SoapCall?
- ruby-on-rails - 使用 belongs_to 关系进行编辑