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

ということでした。

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

 

 

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

経験ゼロから
3ヶ月でアプリが出せる

なぜプログラミングの学習は
9割もの人が挫折するのか

ぼく自身の黒歴史の経験から
挫折パターンと
脱却ノウハウが明らかに!

最後まで読んだあなたは
もう挫折から
脱却せずにはいられない!

かもしれない

チェックするの今でしょ!

みんプロならアプリ出せるって最初に確信した(受講生インタビュー・芝 毅仁さん)

社会人にはうってつけの講座だと思います(受講生インタビュー・大河内 誠一さん)

ぼくの人生挫折ヒストリー

ぼくのプログラミング挫折ヒストリー

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

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

大阪府生まれ。京都大学経済学部経済学科卒業。2000年より、日本生命保険、ニッセイアセットマネジメント、パトナム・インベストメンツ(米国)で、日本株トレーダー・アナリスト、経営企画、システム開発等の業務に従事。主に日本株の売買執行・投資分析、経営計画の策定、海外投資家向け日本株営業、社内トレーディングシステム及び経理システムの開発等を行う。2016年、合同会社てるる設立。スマホアプリプログラマーとして「新感覚脳トレアプリ・記憶戦隊オボエルンジャー」「Meisoー1番シンプルなマインドフルネス瞑想アプリ」をはじめとした、メンタルヘルス・知育系アプリを中心に4タイトル・計8本(Android・iOS)をリリース。2017年、自身のこれまでの社会人経験・プログラミング経験・子育て経験を基に、プログラミングを通じて人々の人生を豊かにして、未来に希望の持てる明るい社会の実現に貢献したいとの想いから、プログラミング完全初心者と挫折経験のある人を支援する「プログラミング挫折撲滅プロジェクト・みんなのプログラミング by Telulu LLC」を設立し、プログラミングサポーター活動と心理カウンセリング活動を開始。これまでに2,000名を超える方のプログラミング挫折撲滅をサポート。

みんプロ式・おすすめ講座3兄弟

1

(上の画像をクリックするとプロモーション動画がご覧頂けます)   プログラミング経験一切不要! 今最も注目のアプリ開発ツール 「Flutter(フラッター)」を使って 経験ゼロでもたった3ヶ ...

2

(上の画像をクリックすると、プロモーション動画がご覧頂けます)   プログラミング経験一切不要! 今最も注目のプログラミング言語 「Koltin(ことりん)」を使って 経験ゼロでもたった3ヶ ...

3

   プログラミング経験一切不要。 世界のスマホの約7割という圧倒的なシェアを占めるAndroid。 そのAndroidアプリの開発力と、世界で最も使われているプログラミング言語「Java ...

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

Copyright© みんなのプログラミング by Telulu LLC , 2019 All Rights Reserved.