SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Kotlin界のsealed classは
Java界でも『sealed』なのか
● Yoshihisa Takeda
● @bomneko_attack
○ 昨日作ったまっさらで闇を抱えていないアカウント
● 株式会社Diverse(ミクシィグループ)
● YYCというマッチングアプリの開発をしています
● 2017年4月SNS(mixi.jp)インフラからAndroidエンジニアに転生しました
○ AWS移行やってました
おさらい: sealed class
● 修飾子 sealedが付いたclass
● sealedが付いたclassのサブクラスは同じファイルにしか置けない
● 継承そのものを禁止するわけではなく範囲を制限する
○ C#のsealed class とは異なる
● 用途
○ 外部から振る舞いを変えてほしくない
○ 代数的データ型を定義したい時
最初からKotlinで書き始めたならともかく…
● 世の中のアプリはKotlinを途中から入れ始めたものが多いのでは
○ JavaとKotlinの世界を行ったり来たり
● Kotlinで書かれたコードはJava界からどんな風に見えるのか
○ 完全に理解する必要はないがときどき思い出してあげると幸せになるかも
● sealed classはJavaから見ても『sealed』なのか?
Kotlinで書いて逆コンパイルすればええんやな₍₍(ง˘ω˘)ว⁾⁾
● 色のセットを定義した sealed classとそれを利用するJavaで書かれたMain
○ Generatorがランダムに色のインスタンスを返してくるので適当に printlnするやーつ
○ (instanceOfとキャストしまくりなので既にツラミ ...)
₍₍(ง˘ω˘)ว⁾⁾
● sealed class自体はabstract class
● 子クラスは宣言の仕方で違いがある
○ ネストされた子クラス : static final class
○ ネストされていない子クラス : final class
Java界では安全ではない説
やってみましょう₍₍(ง˘ω˘)ว⁾⁾
IntelliJの指示通りに直したら赤線消えたぞ!!
実行!!!
死
● 安全機構はちゃんと入っている
○ デフォルトコンストラクタは Private
○ Publicなコンストラクタはコンパイラが自動生成する合成メソッド
○ DefaultConstructorMarkerってやつが必要らしい
https://github.com/JetBrains/kotlin/blob/master/core/runtime.jvm/src/kotlin/jvm/internal/De
faultConstructorMarker.java
■ Kotlinランタイムが差し込むやつなんでしょうか。詳しい方教えてください
Jarの差し替えができるなら逆コンパイルして
アクセス修飾子書き換えてやればいいのさ !
KotlinのSealed Classは
Sealedされてないじゃないか!
https://stackoverflow.com/questions/19492214/extending-class-with-only-private-constructors/19493363#19493363
せやな
まとめ
● sealed classは継承の範囲を絞る
● 使い所の例
○ 外部から振る舞いを変えてほしくない時
○ 代数的データ型を定義したい時
● sealed classはJavaの世界から見てもsealed
○ Kotlin強い
● でも使うのはKotlin同士のほうが圧倒的に楽
○ when式とSmartCast強い
最後に…
● DiverseではSwift(iOS)/Kotlin(Android, サーバー)を扱える
エンジニアを募集中です

Weitere ähnliche Inhalte

Was ist angesagt?

Cognito、Azure ADと仲良くしてみた
Cognito、Azure ADと仲良くしてみたCognito、Azure ADと仲良くしてみた
Cognito、Azure ADと仲良くしてみたTakafumi Kondo
 
The only one big thing every programmer should know
The only one big thing every programmer should knowThe only one big thing every programmer should know
The only one big thing every programmer should knowTakuto Wada
 
「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)
「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)
「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)オラクルエンジニア通信
 
Karpenterで君だけの最強のオートスケーリングを実装しよう
Karpenterで君だけの最強のオートスケーリングを実装しようKarpenterで君だけの最強のオートスケーリングを実装しよう
Karpenterで君だけの最強のオートスケーリングを実装しようKohei Nagase
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門Shuji Kikuchi
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あうセキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あうShinodaYukihiro
 
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!TAKUYA OHTA
 
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことPHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことKentaro Matsui
 
AWSの共有責任モデル(shared responsibility model)
AWSの共有責任モデル(shared responsibility model)AWSの共有責任モデル(shared responsibility model)
AWSの共有責任モデル(shared responsibility model)Akio Katayama
 
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語るKubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語るPreferred Networks
 
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Preferred Networks
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢apkiban
 
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術yoku0825
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話ichirin2501
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~hideakikabuto
 

Was ist angesagt? (20)

Cognito、Azure ADと仲良くしてみた
Cognito、Azure ADと仲良くしてみたCognito、Azure ADと仲良くしてみた
Cognito、Azure ADと仲良くしてみた
 
The only one big thing every programmer should know
The only one big thing every programmer should knowThe only one big thing every programmer should know
The only one big thing every programmer should know
 
「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)
「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)
「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)
 
Karpenterで君だけの最強のオートスケーリングを実装しよう
Karpenterで君だけの最強のオートスケーリングを実装しようKarpenterで君だけの最強のオートスケーリングを実装しよう
Karpenterで君だけの最強のオートスケーリングを実装しよう
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
WayOfNoTrouble.pptx
WayOfNoTrouble.pptxWayOfNoTrouble.pptx
WayOfNoTrouble.pptx
 
AWSからのメール送信
AWSからのメール送信AWSからのメール送信
AWSからのメール送信
 
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あうセキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
 
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
 
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことPHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったこと
 
AWSの共有責任モデル(shared responsibility model)
AWSの共有責任モデル(shared responsibility model)AWSの共有責任モデル(shared responsibility model)
AWSの共有責任モデル(shared responsibility model)
 
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語るKubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
 
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
 

Kotlin界のsealed classはJava界でも『sealed』なのか