Soumettre la recherche
Mettre en ligne
Kotlin界のsealed classはJava界でも『sealed』なのか
•
0 j'aime
•
2,504 vues
Yoshihisa Takeda
Suivre
Shibuya.apk#20で発表したLTのスライドです。
Lire moins
Lire la suite
Logiciels
Signaler
Partager
Signaler
Partager
1 sur 22
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
僕とヤフーと時々Teradata #prestodb
僕とヤフーと時々Teradata #prestodb
Yahoo!デベロッパーネットワーク
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
Kaname Motoyama
メッセージキュー「Pulsar」の紹介 @OSC_20171007
メッセージキュー「Pulsar」の紹介 @OSC_20171007
Nozomi Kurihara
PHPデプロイツールの世界
PHPデプロイツールの世界
Yuuki Takezawa
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
Apache EventMesh を使ってみた
Apache EventMesh を使ってみた
Yoshiyasu SAEKI
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Toshiaki Maki
Recommandé
僕とヤフーと時々Teradata #prestodb
僕とヤフーと時々Teradata #prestodb
Yahoo!デベロッパーネットワーク
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
Kaname Motoyama
メッセージキュー「Pulsar」の紹介 @OSC_20171007
メッセージキュー「Pulsar」の紹介 @OSC_20171007
Nozomi Kurihara
PHPデプロイツールの世界
PHPデプロイツールの世界
Yuuki Takezawa
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
Apache EventMesh を使ってみた
Apache EventMesh を使ってみた
Yoshiyasu SAEKI
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Toshiaki Maki
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
Yu Imai
InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤
MicroAd, Inc.(Engineer)
Kibana + Winlogbeatで実現:Windowsのログ分析入門
Kibana + Winlogbeatで実現:Windowsのログ分析入門
Yuki Nakai
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
Preferred Networks
[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: Bigdam
SATOSHI TAGOMORI
ストリーミングのげんざい
ストリーミングのげんざい
Tetsuya Morimoto
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Preferred Networks
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
GeoPackageを使ってみた(おざき様)
GeoPackageを使ってみた(おざき様)
OSgeo Japan
新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る
Masahiro Hidaka
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Yahoo!デベロッパーネットワーク
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
オープンソースの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
Preferred Networks
JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活
Classi.corp
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
株式会社MonotaRO Tech Team
Contenu connexe
Tendances
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
Yu Imai
InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤
MicroAd, Inc.(Engineer)
Kibana + Winlogbeatで実現:Windowsのログ分析入門
Kibana + Winlogbeatで実現:Windowsのログ分析入門
Yuki Nakai
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
Preferred Networks
[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: Bigdam
SATOSHI TAGOMORI
ストリーミングのげんざい
ストリーミングのげんざい
Tetsuya Morimoto
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Preferred Networks
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
GeoPackageを使ってみた(おざき様)
GeoPackageを使ってみた(おざき様)
OSgeo Japan
新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る
Masahiro Hidaka
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Yahoo!デベロッパーネットワーク
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
オープンソースの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
Preferred Networks
JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活
Classi.corp
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
株式会社MonotaRO Tech Team
Tendances
(20)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤
Kibana + Winlogbeatで実現:Windowsのログ分析入門
Kibana + Winlogbeatで実現:Windowsのログ分析入門
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
エンジニアライクにドキュメントを作成してみた件
エンジニアライクにドキュメントを作成してみた件
Planet-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
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
GeoPackageを使ってみた(おざき様)
GeoPackageを使ってみた(おざき様)
新版 OutOfMemoryErrorを知る
新版 OutOfMemoryErrorを知る
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介
「機械学習:技術的負債の高利子クレジットカード」のまとめ
「機械学習:技術的負債の高利子クレジットカード」のまとめ
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
Kotlin界のsealed classはJava界でも『sealed』なのか
1.
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 とは異なる ● 用途 ○ 外部から振る舞いを変えてほしくない ○ 代数的データ型を定義したい時
4.
最初からKotlinで書き始めたならともかく… ● 世の中のアプリはKotlinを途中から入れ始めたものが多いのでは ○ JavaとKotlinの世界を行ったり来たり ●
Kotlinで書かれたコードはJava界からどんな風に見えるのか ○ 完全に理解する必要はないがときどき思い出してあげると幸せになるかも ● sealed classはJavaから見ても『sealed』なのか?
5.
Kotlinで書いて逆コンパイルすればええんやな₍₍(ง˘ω˘)ว⁾⁾
6.
● 色のセットを定義した sealed
classとそれを利用するJavaで書かれたMain ○ Generatorがランダムに色のインスタンスを返してくるので適当に printlnするやーつ ○ (instanceOfとキャストしまくりなので既にツラミ ...)
7.
₍₍(ง˘ω˘)ว⁾⁾
8.
9.
10.
11.
● sealed class自体はabstract
class ● 子クラスは宣言の仕方で違いがある ○ ネストされた子クラス : static final class ○ ネストされていない子クラス : final class
12.
Java界では安全ではない説
13.
やってみましょう₍₍(ง˘ω˘)ว⁾⁾
14.
15.
IntelliJの指示通りに直したら赤線消えたぞ!!
16.
実行!!!
17.
死
18.
● 安全機構はちゃんと入っている ○ デフォルトコンストラクタは
Private ○ Publicなコンストラクタはコンパイラが自動生成する合成メソッド ○ DefaultConstructorMarkerってやつが必要らしい https://github.com/JetBrains/kotlin/blob/master/core/runtime.jvm/src/kotlin/jvm/internal/De faultConstructorMarker.java ■ Kotlinランタイムが差し込むやつなんでしょうか。詳しい方教えてください
19.
Jarの差し替えができるなら逆コンパイルして アクセス修飾子書き換えてやればいいのさ ! KotlinのSealed Classは Sealedされてないじゃないか! https://stackoverflow.com/questions/19492214/extending-class-with-only-private-constructors/19493363#19493363
20.
せやな
21.
まとめ ● sealed classは継承の範囲を絞る ●
使い所の例 ○ 外部から振る舞いを変えてほしくない時 ○ 代数的データ型を定義したい時 ● sealed classはJavaの世界から見てもsealed ○ Kotlin強い ● でも使うのはKotlin同士のほうが圧倒的に楽 ○ when式とSmartCast強い
22.
最後に… ● DiverseではSwift(iOS)/Kotlin(Android, サーバー)を扱える エンジニアを募集中です
Télécharger maintenant