SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
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, サーバー)を扱える
エンジニアを募集中です

Contenu connexe

Tendances

オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)Yu Imai
 
InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤MicroAd, Inc.(Engineer)
 
Kibana + Winlogbeatで実現:Windowsのログ分析入門
Kibana + Winlogbeatで実現:Windowsのログ分析入門Kibana + Winlogbeatで実現:Windowsのログ分析入門
Kibana + Winlogbeatで実現:Windowsのログ分析入門Yuki Nakai
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Preferred Networks
 
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送Google Cloud Platform - Japan
 
エンジニアライクにドキュメントを作成してみた件
エンジニアライクにドキュメントを作成してみた件エンジニアライクにドキュメントを作成してみた件
エンジニアライクにドキュメントを作成してみた件Mass310
 
Planet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: BigdamPlanet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: BigdamSATOSHI TAGOMORI
 
ストリーミングのげんざい
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざいTetsuya Morimoto
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2Preferred Networks
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
GeoPackageを使ってみた(おざき様)
GeoPackageを使ってみた(おざき様)GeoPackageを使ってみた(おざき様)
GeoPackageを使ってみた(おざき様)OSgeo Japan
 
新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知るMasahiro Hidaka
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介 オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介 briscola-tokyo
 
「機械学習:技術的負債の高利子クレジットカード」のまとめ
「機械学習:技術的負債の高利子クレジットカード」のまとめ「機械学習:技術的負債の高利子クレジットカード」のまとめ
「機械学習:技術的負債の高利子クレジットカード」のまとめRecruit Technologies
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43Preferred Networks
 
JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活Classi.corp
 
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)株式会社MonotaRO Tech Team
 

Tendances (20)

オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
 
InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤
 
Kibana + Winlogbeatで実現:Windowsのログ分析入門
Kibana + Winlogbeatで実現:Windowsのログ分析入門Kibana + Winlogbeatで実現:Windowsのログ分析入門
Kibana + Winlogbeatで実現:Windowsのログ分析入門
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
 
エンジニアライクにドキュメントを作成してみた件
エンジニアライクにドキュメントを作成してみた件エンジニアライクにドキュメントを作成してみた件
エンジニアライクにドキュメントを作成してみた件
 
Planet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: BigdamPlanet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: Bigdam
 
ストリーミングのげんざい
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざい
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
GeoPackageを使ってみた(おざき様)
GeoPackageを使ってみた(おざき様)GeoPackageを使ってみた(おざき様)
GeoPackageを使ってみた(おざき様)
 
新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介 オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介
 
「機械学習:技術的負債の高利子クレジットカード」のまとめ
「機械学習:技術的負債の高利子クレジットカード」のまとめ「機械学習:技術的負債の高利子クレジットカード」のまとめ
「機械学習:技術的負債の高利子クレジットカード」のまとめ
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
 
JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活
 
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
 

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