nuomiphp
正在加载…
请使用更现代的浏览器并启用 JavaScript 以获得最佳浏览体验。
加载论坛时出错,请强制刷新页面重试。
最近在看 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) 小括号的用法是不是一样?
qianxi0410
scala 没有?
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
youngxhui
lisongeee
看错了😥
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 的代码, 见谅。.我不是搞这玩意的。
zoharSoul
这不就是构造函数吗
jiulang
record TcpReset(TcpConnection Connection, byte[]? DivertBuffer, WinDivertAddress DivertAddress, long Ticks);
jiulang
kotlin 和 csharp 简直一样
HubOwO
写的没啥问题呀,能省就省了呗,反正是数据类,就是为了声明结构,要那么多 get set 干啥,写多了就很丝滑,看起来也很顺畅,设计思想 歪瑞古德
下一页 »