Suche senden
Hochladen
Kotlin界のsealed classはJava界でも『sealed』なのか
•
0 gefällt mir
•
2,504 views
Yoshihisa Takeda
Folgen
Shibuya.apk#20で発表したLTのスライドです。
Weniger lesen
Mehr lesen
Software
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 22
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
Kaname Motoyama
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
Paxos
Paxos
Preferred Networks
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
DevOps with Database on AWS
DevOps with Database on AWS
Amazon Web Services Japan
インストールしてみたWindows Server 2019 on VirtualBox
インストールしてみたWindows Server 2019 on VirtualBox
Shin Tanigawa
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
yoku0825
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
Empfohlen
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
Kaname Motoyama
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
Paxos
Paxos
Preferred Networks
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
DevOps with Database on AWS
DevOps with Database on AWS
Amazon Web Services Japan
インストールしてみたWindows Server 2019 on VirtualBox
インストールしてみたWindows Server 2019 on VirtualBox
Shin Tanigawa
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
yoku0825
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
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 know
Takuto Wada
「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)
「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)
オラクルエンジニア通信
Karpenterで君だけの最強のオートスケーリングを実装しよう
Karpenterで君だけの最強のオートスケーリングを実装しよう
Kohei Nagase
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
Shuji Kikuchi
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Daisuke Yamazaki
AWSからのメール送信
AWSからのメール送信
Amazon Web Services Japan
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
ShinodaYukihiro
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
TAKUYA OHTA
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったこと
Kentaro Matsui
AWSの共有責任モデル(shared responsibility model)
AWSの共有責任モデル(shared responsibility model)
Akio Katayama
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 #55
Preferred Networks
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
apkiban
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
yoku0825
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
ichirin2501
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
AdvancedTechNight
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
hideakikabuto
Weitere ähnliche Inhalte
Was ist angesagt?
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 know
Takuto Wada
「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)
「あの企業は実際どうやってるの?」顧客実例で語るデータ・ドリブンの実像とは (Oracle Cloudウェビナーシリーズ: 2021年9月1日)
オラクルエンジニア通信
Karpenterで君だけの最強のオートスケーリングを実装しよう
Karpenterで君だけの最強のオートスケーリングを実装しよう
Kohei Nagase
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
Shuji Kikuchi
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Daisuke Yamazaki
AWSからのメール送信
AWSからのメール送信
Amazon Web Services Japan
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
ShinodaYukihiro
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
TAKUYA OHTA
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったこと
Kentaro Matsui
AWSの共有責任モデル(shared responsibility model)
AWSの共有責任モデル(shared responsibility model)
Akio Katayama
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 #55
Preferred Networks
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
apkiban
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
yoku0825
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
ichirin2501
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
AdvancedTechNight
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
hideakikabuto
Was ist angesagt?
(20)
Cognito、Azure ADと仲良くしてみた
Cognito、Azure ADと仲良くしてみた
The 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日)
Karpenterで君だけの最強のオートスケーリングを実装しよう
Karpenterで君だけの最強のオートスケーリングを実装しよう
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
AWSからのメール送信
AWSからのメール送信
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったこと
AWSの共有責任モデル(shared responsibility model)
AWSの共有責任モデル(shared responsibility model)
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 #55
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
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, サーバー)を扱える エンジニアを募集中です
Jetzt herunterladen