Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaからみたKotlin
Search
Amane Nikaido
October 17, 2017
Programming
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaからみたKotlin
Amane Nikaido
October 17, 2017
More Decks by Amane Nikaido
See All by Amane Nikaido
HTTPSの基本から NetworkSecurityConfigまで
a2kaido
5
4.5k
React with Kotlin
a2kaido
2
1.3k
Use Kotlin for build.gradle.
a2kaido
0
510
Other Decks in Programming
See All in Programming
共通化で考えるべきは、実装より公開する型だった
codeegg
0
130
act1-costs.pdf
sumedhbala
0
190
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
0
170
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
220
自作OSでスライド発表する
uyuki234
1
3.7k
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
200
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
450
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
7
3.3k
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.9k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
840
Performance Engineering for Everyone
elenatanasoiu
0
260
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.7k
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
1
500
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
170
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
280
From π to Pie charts
rasagy
0
230
WENDY [Excerpt]
tessaabrams
11
38k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Designing Powerful Visuals for Engaging Learning
tmiket
1
440
Designing Experiences People Love
moore
143
24k
Typedesign – Prime Four
hannesfritz
42
3.1k
Deep Space Network (abreviated)
tonyrice
0
220
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
210
Transcript
+BWB͔Βݟͨ ,PUMJO ೋ֊ಊɹว
w ϓϩϑΟʔϧ w ,PUMJOָ͍͠ w +BWB͔Βݟͨ,PUMJO w ·ͱΊ ͘͡
ೋ֊ಊว ʹ͔͍Ͳ͏͋·Ͷ !BLBJEP!BOJLBJEP ,PUMJO͕͖Ͱ͢ ϓϩϑΟʔϧ ͨ·ʹ,PUMJOʹ13ૹͬͯ·͢
,PUMJOͷ͕͖͜͜ ϘΠϥʔϓϨʔτΛݮΒͤΔ /VMM4BGFUZ XIFO TXJUDI ͷCSFBLॻ͔ͳ͍͍ͯ͘ 4NBSU$BTU ηϛίϩϯॻ͔ͳ͍͍ͯ͘ είʔϓؔ ͔Θ͍͍
ॻָ͍͍͍ͯͯ͠ 4".ม σϑΥϧτҾ
,PUMJOͷ͕͖͜͜ ϘΠϥʔϓϨʔτΛݮΒͤΔ /VMM4BGFUZ XIFO TXJUDI ͷCSFBLॻ͔ͳ͍͍ͯ͘ 4NBSU$BTU ηϛίϩϯॻ͔ͳ͍͍ͯ͘ είʔϓؔ ͔Θ͍͍
ॻָ͍͍͍ͯͯ͠ 4".ม σϑΥϧτҾ
5IFGVOLFZXPSEJT VTFEUPEFDMBSFB GVODUJPO 1SPHSBNNJOHJO ,PUMJOJTMPUTPGGVO JOEFFE
,PUMJOָ͍͠ʂ
,PUMJOָ͍͠ʂ
͚Ͳɺ+BWBͷؾ࣋ͪ ߟ͑ͯ͋͛Αʁ
+BWB͔Βݟͨ ,PUMJO ೋ֊ಊɹว
w ,PUMJOͱ+BWBͷޓੑ w +BWB͔Β,PUMJOͷίʔυΛݺͼग़ͤΔ w ,PUMJO͔Β+BWBͷίʔυΛݺͼग़ͤΔ w ,PUMJOͱ+BWBͷݴޠ༷ࠩ w PCKFDU
w UPQMFWFMGVODUJPO w EFGBVMUQBSBNFUFS w FUD ,PUMJOͱ+BWB
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
ਐΊํ ୯ମςετॻ͘ ίʔυॻ͘
0CKFDU object KotlinObject { fun hello() : String { return
"Hello Kotlin!" } fun hello2() = "Hello Kotlin!" } ˞γϯάϧτϯͰ͢ ,PUMJOͷ0CKFDU ˞IFMMP ͱIFMMP CZUFDPEFʹ͢Δͱશ͘ಉ͡Ͱ͢
0CKFDU import jp.a2kaido.skfj.KotlinObject as KO class KotlinObjectFromKotlinTest { @Test fun
KotlinObject() { Assert.assertEquals("Hello Kotlin!", KO.hello()) Assert.assertEquals("Hello Kotlin!", KO.hello2()) } } ,PUMJO͔Βݟͨ߹
0CKFDU public class KotlinObjectFromJavaTest { @Test public void KotlinObject() {
Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello()); Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello2()); } } +BWB͔Βݟͨ߹
0CKFDU public class KotlinObjectFromJavaTest { @Test public void KotlinObject() {
Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello()); Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello2()); } } +BWB͔Βݟͨ߹ ˞*/45"/$&ʜ
0CKFDU ,PUMJOͷ0CKFDU object KotlinObject2 { @JvmStatic fun hello() : String
{ return "Hello Kotlin!" } @JvmStatic fun hello2() = "Hello Kotlin!" }
0CKFDU +BWB͔Βݟͨ߹ public class KotlinObjectFromJavaTest { @Test public void KotlinObject()
{ Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello()); Assert.assertEquals("Hello Kotlin!", KotlinObject.INSTANCE.hello2()); } @Test public void KotlinObject2() { Assert.assertEquals("Hello Kotlin!", KotlinObject2.hello()); Assert.assertEquals("Hello Kotlin!", KotlinObject2.hello2()); } } ,PUMJO0CKFDUHFU*OTUBODF IFMMP ͱॻ͖͍ͨ
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
5PQMFWFMGVODUJPO ,PUMJOͷ5PQMFWFMGVODUJPO fun hello() : String { return "Hello Kotlin!"
} ,PUMJO'VODUJPOLU ˞Ϋϥεʹଐ͞ͳ͍ؔ
5PQMFWFMGVODUJPO ,PUMJO͔Βݟͨ߹ class KotlinFunctionFromKotlinTest { @Test fun KotlinFunction() { Assert.assertEquals("Hello
Kotlin!", hello()) } }
5PQMFWFMGVODUJPO +BWB͔Βݟͨ߹ public class KotlinFunctionFromJavaTest { @Test public void KotlinFunction()
{ Assert.assertEquals("Hello Kotlin!", KotlinFunctionKt.hello()); } } ,PUMJO'VODUJPO,Uͱ͍͏Ϋϥε͕Ͱ͖ͯΔ ͦͷΫϥεʹTUBUJDϝιου͕ੜ͑ͯΔ
5PQMFWFMGVODUJPO ,PUMJOͷ5PQMFWFMGVODUJPO fun hello() : String { return "Hello Kotlin!"
} ,PUMJO'VODUJPOLU ,PUMJO'VODUJPO,Uͱ͍͏໊લ͕ؾ࣋ͪѱ͍ͷͰɺ
5PQMFWFMGVODUJPO ,PUMJOͷ5PQMFWFMGVODUJPO @file:JvmName("KotlinFunctionRefine") package jp.a2kaido.skfj.function fun helloRefine() : String {
return "Hello Kotlin!" } ,PUMJO'VODUJPO3FpOFLU ໊લΛ͚ͭΔ
5PQMFWFMGVODUJPO +BWB͔Βݟͨ߹ public class KotlinFunctionFromJavaTest { @Test public void KotlinFunction()
{ Assert.assertEquals("Hello Kotlin!", KotlinFunctionKt.hello()); } @Test public void KotlinObjectRefine() { Assert.assertEquals("Hello Kotlin!", KotlinFunctionRefine.helloRefine()); } } ,Uͷ··ͩͱؾ࣋ͪѱ͍ͷͰΞϊςʔγϣϯͰ ໊લΛ͚ͭͯ͋͛·͠ΐ͏ +BWB͔ΒͰͳ͘ݺͼग़ͤΔʂ
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
&YUFOTJPO ,PUMJOͷ&YUFOTJPO fun String.hello() = "Hello Kotlin!" 4USJOH&YUFOTJPOLU @file:JvmName("String") package
jp.a2kaido.skfj.extension fun String.helloRefine() = "Hello Kotlin!" 4USJOH&YUFOTJPO3FpOFLU
&YUFOTJPO ,PUMJO͔Βݟͨ߹ class StringExtensionFromKotlinTest { @Test fun StringExtension() { Assert.assertEquals("Hello
Kotlin!", "hoge".hello()) } @Test fun StringExtensionRefine() { Assert.assertEquals("Hello Kotlin!", "hoge".helloRefine()) } }
&YUFOTJPO +BWB͔Βݟͨ߹ public class StringExtensionFromJavaTest { @Test public void StringExtension()
{ Assert.assertEquals("Hello Kotlin!", StringExtensionKt.hello("hoge")); } @Test public void StringExtensionRefile() { Assert.assertEquals("Hello Kotlin!", String.helloRefine("hoge")); } } 4USJOH&YUFOTJPO,Uͱ͍͏Ϋϥε͕Ͱ͖ͯΔ ϨγʔόʔΛҾͰड͚औΔ ݺͼग़ͤΔ͚Ͳʜ&YUFOTJPOͷ͝ར༻ܭըతʹ
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
%FGBVMU"SHVNFOU ,PUMJOͷ%FGBVMU"SHVNFOU class KotlinDefaultArgument { fun hello(s : String =
"Kotlin") = "Hello $s!" } class KotlinDefaultArgumentRefine { @JvmOverloads fun hello(s : String = "Kotlin") = "Hello $s!" }
%FGBVMU"SHVNFOU ,PUMJO͔Βݟͨ߹ class KotlinDefaultArgumentFromKotlinTest { @Test fun kotlinDefaultArgument() { val
target = KotlinDefaultArgument() Assert.assertEquals("Hello Kotlin!", target.hello()) Assert.assertEquals("Hello Java!", target.hello("Java")) } @Test fun kotlinDefaultArgumentRefine() { val target = KotlinDefaultArgumentRefine() Assert.assertEquals("Hello Kotlin!", target.hello()) Assert.assertEquals("Hello Java!", target.hello("Java")) } }
%FGBVMU"SHVNFOU +BWB͔Βݟͨ߹ public class KotlinDefaultArgumentFromJavaTest { @Test public void KotlinDefaultArgument()
{ KotlinDefaultArgument target = new KotlinDefaultArgument(); // cannot compile // Assert.assertEquals("Hello Kotlin!", target.hello()); Assert.assertEquals("Hello Java!", target.hello("Java")); } @Test public void KotlinDefaultArgumentRefine() { KotlinDefaultArgumentRefine target = new KotlinDefaultArgumentRefine(); Assert.assertEquals("Hello Kotlin!", target.hello()); Assert.assertEquals("Hello Java!", target.hello("Java")); } } @JvmOverloadsΛ͚ͭͳ͍ͱҾͳ͠ͷݺͼग़͕͠Ͱ͖ͳ͍
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
%FGBVMU*NQMFNFOUBUJPO interface DefaultInterface { fun hello() = "Hello Kotlin!" fun
hello2() : String } ,PUMJOͷ%FGBVMU*NQMFNFOUBUJPO
%FGBVMU*NQMFNFOUBUJPO class DefaultInterfaceKotlinImpl : DefaultInterface { override fun hello2() =
"Hello Kotlin!" } ,PUMJOͰ࣮
%FGBVMU*NQMFNFOUBUJPO public class DefaultInterfaceJavaImpl implements DefaultInterface { @NotNull @Override public
String hello() { // ࣮ඞਢ return DefaultImpls.hello(this); // DefaultImpls͕ੜ͑ͯΔ } @NotNull @Override public String hello2() { return "Hello Kotlin!"; } } +BWBͰ࣮ Βͳ͍ͱແཧήʔɻσϑΥϧτΛແࢹ࣮ͯͦ͠͠͏ɻ
0CKFDU 5PQMFWFMGVODUJPO &YUFOTJPO %FGBVMU"SHVNFOU %FGBVMU*NQMFNFOUBUJPOJO*OUFSGBDF ࠓ+BWB͔ΒݟΔͷ
w ,PUMJOָ͍͠ʂ w +BWB͔Βݺͼग़͞ΕΔॴগ͠ߟྀͯ͠ ͋͛ͯͶ w 'VMM,PUMJOͳΒ+BWBͷؾ࣋ͪߟ͑ͳͯ͘ ͍͍ ·ͱΊ
w αϯϓϧίʔυ w IUUQTHJUIVCDPNBLBJEPTFF LPUMJOGSPNKBWBQSFTFOUBUJPO ࢿྉ
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠