13
Kotlin 的 data class 會對你的程式產生什麼樣的化學反應 (ingramchen.io)
rayshih 積分 5 編輯於
  sealed class Event
  data class BroadCastEvent(
    val payload: Payload
  ): Event()
  data class OneToOneEvent(
     val destination: Destination, 
     val payload: Payload,
     val secret:Boolean = false
  ): Event()

然後在 messenger.send 這個 function 做 pattern matching
這樣就只有在 OneToOne 的時候才能使用 secret 選項,不會寫錯

Thinker 積分 2

突然同情起寫 Java 的 programmer, 一個 data class 就可以讓你們 high 起來了 XD

IngramChen 積分 0

其實 scala 就有了,現在 kotlin 語法一大半源也是自於它。前幾年 Java 開發者也是峰湧到 scala 去,那時的開發者就有差不多的經驗吧。

但是 Scala 難寫難懂,紅沒多久又被大家放掉了。語言功能多又強,但找不到合適的平衡,沒有有力的後盾,沒有 commitment,最終那些功能都是白作功,沒人用。

koji 積分 1
like below ?
sealed class Option(val soundFile: String? = null,
                    val showNotification: Boolean = false) {
    data class OneToOneOption(val secret: Boolean = false) : Option()
}
IngramChen 積分 1

這個設計還是會發生像下面的呼叫:

messenger.send(Topic("foo"), Text("secret"), OneToOneOption(secret=true))

然後 runtime 時就爆了

koji 積分 1 編輯於

I see.....orz 那只想到還是拆開method或塞給 Topic/Receiver 內好了...

IngramChen 積分 1

是啊,大概就是你說的兩種解法