Androidミニ講座

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

投稿日:

 

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」をつけましょう

ということでした。

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

 

 

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

「みんなのプログラミング  by Telulu LLC(みんプロ)」について

会社概要

みんプロ最新トピックス

かなり長い代表者プロフィール

みんプロにかける想い

みんプロに頂いたお客様の声

サービス・料金体系

作成アプリ実績

みんプロ公式Facebook

みんプロ公式LINE@(登録者限定無料小冊子プレゼント!)

公式ブログで随時情報発信中!!

きーぼーのつぶやき

用語

Android

  • この記事を書いた人
北川 博之 (みんなのプログラミング 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© みんプロ式・初心者向けAndroidスマホアプリ専門プログラミング講座/教室/スクール/塾-大阪府高槻市 , 2018 All Rights Reserved.