jeesk
```
class Gallery_1(val context: Context) {
private val contentResolver by lazy {
context.contentResolver
}
//
class Album(
val id: String,
val name: String,
var count: Long = 0,
// ? 表示可以接受空
var uri: Uri? = null,
var file: File? = null
)
```
class 后面跟上小括号, 搞得我完全不知道这是什么意思了 无法是 java, scala ,go 还是 js 都没有这用法,kotlin 直接不按套路出牌, 晚上也没有查到这个 Album 是什么用法, 有没有 kotlin 的大佬能讲一讲。
youngxhui
kotlin data class
lisongeee
youngxhui #2 《 kotlin data class 》都没有 data class 关键字,哪来的 data class ?这是在构造器声明属性并初始化属性
cmdOptionKana
你看这个 class Gallery_1(val context: Context),与 class Album(val id: String) 小括号的用法是不是一样?
chendy
java 还真有,但是不是 class (虽然也是 class )是 record
FireFoxAhri
有点像 Scala 的 case class
AltairT
https://kotlinlang.org/docs/classes.html
大哥,自己看看官方文档,没东西括号是可以省略的。现学现卖。
EscYezi
如果用过 Lombok ,这个类似于成员变量+AllArgConstructor 的简化版
bringyou
ps: 自从 java14 开始,也有这个语法了,详见[record class]( https://www.baeldung.com/java-record-keyword)
Leviathann
不是 现在连学都不学就可以来吐槽品评语法了吗
lisongeee
楼上某些人不要把 data class 和 普通 class 搞混了,楼主代码示例里没有 data class 也没有 record class
这就是 在构造器声明属性并初始化属性
在线运行 https://pl.kotl.in/CjwWRrWLl
su100
// 1
class Album(
val id: String,
val name: String,
var count: Long = 0,
var age: Int? = null,
)
// 2
class Album2(id: String, name: String, count: Long, age: Int? = null) {
val id = id
var name = name
var count = count
var age = age
}
// 3
class Album3(id: String, name: String, count: Long, age: Int? = null) {
val id: String
var name: String
var count: Long
var age: Int?
init {
this.id = id
this.name = name
this.count = count
this.age = age
}
}
==============
以上三种写法等价的,如果写成第二种,idea 会提示你可以将 id 、name 这些移到构造函数,就是以一种那样。
MakHoCheung
Java 怎么就没有这种用法呢,Java 的 Record 就是这种写法
jeesk
MakHoCheung 不好意思。 除了楼上说的 scala 的 case 我在 java 真没见过省略参数。 我也是第一次看 kotlin 的代码, 见谅。.我不是搞这玩意的。
jiulang
record TcpReset(TcpConnection Connection, byte[]? DivertBuffer, WinDivertAddress DivertAddress, long Ticks);
jiulang
kotlin 和 csharp 简直一样