Kotlin界のsealed classはJava界でも『sealed』なのか
- 2. ● Yoshihisa Takeda
● @bomneko_attack
○ 昨日作ったまっさらで闇を抱えていないアカウント
● 株式会社Diverse(ミクシィグループ)
● YYCというマッチングアプリの開発をしています
● 2017年4月SNS(mixi.jp)インフラからAndroidエンジニアに転生しました
○ AWS移行やってました
- 3. おさらい: sealed class
● 修飾子 sealedが付いたclass
● sealedが付いたclassのサブクラスは同じファイルにしか置けない
● 継承そのものを禁止するわけではなく範囲を制限する
○ C#のsealed class とは異なる
● 用途
○ 外部から振る舞いを変えてほしくない
○ 代数的データ型を定義したい時
- 6. ● 色のセットを定義した sealed classとそれを利用するJavaで書かれたMain
○ Generatorがランダムに色のインスタンスを返してくるので適当に printlnするやーつ
○ (instanceOfとキャストしまくりなので既にツラミ ...)
- 18. ● 安全機構はちゃんと入っている
○ デフォルトコンストラクタは Private
○ Publicなコンストラクタはコンパイラが自動生成する合成メソッド
○ DefaultConstructorMarkerってやつが必要らしい
https://github.com/JetBrains/kotlin/blob/master/core/runtime.jvm/src/kotlin/jvm/internal/De
faultConstructorMarker.java
■ Kotlinランタイムが差し込むやつなんでしょうか。詳しい方教えてください
- 21. まとめ
● sealed classは継承の範囲を絞る
● 使い所の例
○ 外部から振る舞いを変えてほしくない時
○ 代数的データ型を定義したい時
● sealed classはJavaの世界から見てもsealed
○ Kotlin強い
● でも使うのはKotlin同士のほうが圧倒的に楽
○ when式とSmartCast強い