Android スマホアプリ開発ミニ動画講座

[Android]Kotlinの「@JvmStatic」アノテーションとは

投稿日:2018年7月19日 更新日:

 

Kotlinでは、どのクラスからでもインスタンスを経由せずにアクセスできるメソッド(クラスメソッド)を作る方法の1つに「companion object」というものがあります。

例えば、こんな感じでcompanion objectの中にnewInstanceメソッドを設定すると、

 

他のKotlinファイルから呼び指す際に、KotlinFragmentのインスタンスを経由せずに、こんな感じでアクセスすることが出来ます。

 

companion object内に作ったメソッドはJavaでいう「static」メソッドではない

まさに、これはJavaでいう「staticメソッド(クラスメソッド)」という感じになるはずなのですが、ところがどっこいしょ。

他のJavaファイルからは、上のような感じで呼び出すことができず、

 

Companionクラスを経由しないと呼び出すことができないのです。

 

 

なんでや?

Kotlinのcompanion object内のメンバ(プロパティ・メソッド)は、一見Javaのstaticのように見えますが、実行時にインスタンス化されるので、インターフェースの実装なども出来るという点で、「static」とは異なる。

ということらしいです(companion objectは実際のオブジェクトのシングルトンインスタンスだそうです)。

こんな感じで。

Note that, even though the members of companion objects look like static members in other languages, at runtime those are still instance members of real objects, and can, for example, implement interfaces:

(companion object内のメンバ(プロパティ・メソッド)は、他のプログラミング言語(Java等)における『static(静的な)』メンバのように見えるが、Kotlinでは、実行時におけるこれらのメンバは実オブジェクトのインタンスメンバ(動的メンバ)であり、たとえばインターフェースを実装することもできる)

https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects

 

ほなどないしたらエエねん!?

「@JvmStatic」アノテーションをつけたらエエということらしいです。

However, on the JVM you can have members of companion objects generated as real static methods and fields, if you use the @JvmStatic annotation.

(しかしながら、JVM(Java Virtual Machine)では、companion objectのメンバを本当にstaticなフィールドやメソッド(メンバ)として生成することもでき、その際は@JvmStaticアノテーションをつければよい)

https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects

 

ですので、こうしてやると、

 

Javaファイルからでも、ちゃんとstaticメソッドとしてアクセスできるようになりました。

 

ということです。

 

JavaのstaticメソッドをKotlinで作りたい場合はcompanion objectの中で「@JvmStatic」をつけましょう

ということでした。

詳しい解説は上の動画をご覧ください。それよりもっと詳しく知りたい場合はこれを読めばいいかもです。

 

 

みんプロへのお問い合わせはこちらよりお気軽にお寄せ下さい

ほんまにやってよかったなと

数度の挫折経験から
みんプロと出会ってわずか2ヶ月でアプリをリリース!
芝 毅仁さんの大逆転劇インタビュー

今すぐチェック

  • この記事を書いた人
北川 博之 (みんなのプログラミング by Telulu LLC 代表)

北川 博之(みんなのプログラミング by Telulu LLC 代表)

大阪府生まれ。京都大学経済学部経済学科卒業。2000年より、日本生命保険、ニッセイアセットマネジメント、パトナム・インベストメンツ(米国)で、日本株トレーダー・アナリスト、経営企画、システム開発等の業務に従事。主に日本株の売買執行・投資分析、経営計画の策定、海外投資家向け日本株営業、社内トレーディングシステム及び経理システムの開発等を行う。2016年、合同会社てるる設立。スマホアプリプログラマーとして「新感覚脳トレアプリ・記憶戦隊オボエルンジャー」「Meiso-一番シンプルなマインドフルネス瞑想」「ご当地的鉄道アプリ・関西鉄道駅検定(京阪神編)」など、知育・メンタルヘルス系を中心に5タイトル・計10本のAndroid・iOSアプリをリリース。2017年、自身のこれまでの社会人経験・プログラミング経験・子育て経験をを基に、プログラミングを通じて人々の人生を豊かにして、未来に希望の持てる明るい社会の実現に貢献したいとの想いから、ビギナー向けプログラミングひろば「みんなのプログラミング by Telulu LLC」を設立し、プログラミングサポーター活動と心理カウンセリング活動を開始。3児の父。かなり長めのプロフィールをこちらから https://minpro.net/profile-of-ceo

-Android, スマホアプリ開発ミニ動画講座

Copyright© みんなのプログラミング by Telulu LLC - 初心者向け反転授業型Kotlin✕Androidアプリ開発オンラインプログラミング講座「みんプロ式」 , 2019 All Rights Reserved.