ホームページ  >  記事  >  バックエンド開発  >  Java や C# と同様に Kotlin で静的メソッドを実装する方法の詳細な説明

Java や C# と同様に Kotlin で静的メソッドを実装する方法の詳細な説明

黄舟
黄舟オリジナル
2017-06-04 09:41:351810ブラウズ

Java や C# に似た Kotlin で static メソッドを実装するにはどうすればよいですか? この記事では、パッケージ レベルの 関数、コンパニオン オブジェクト

、拡張関数、オブジェクト宣言などのいくつかのメソッドを要約します。これには、誰もがさまざまな状況に応じて選択する必要があります。

そのような記事はインターネット上でたくさん見つかります。公式の推奨はパッケージレベルの関数であり、コンパニオンオブジェクト (コンパニオンクラス

) を使用するという人もいます。これらは良い選択肢ですが、完璧ではなく、さまざまな状況でより良い選択肢があります。パッケージレベル関数、コンパニオンオブジェクト、拡張関数、オブジェクト宣言といったいくつかのメソッドをまとめました。これには、誰もがさまざまな状況に応じて選択する必要があります。

1. パッケージレベルの関数

Kotlin と Java および C# の違いは、パッケージ内で直接 関数を宣言

できることです。方法はカテゴリと同じなので、ここでは詳しく説明しません。これは確かに非常に良い選択です。これは、関数にデータ共有のための内部クラスを含める必要がないメソッドに適しています。

2. コンパニオン オブジェクト


意味的に言えば、コンパニオン関数は Java の静的メソッドに最も似ているため、コンパニオン オブジェクトは Java の静的クラスのすべての内容を完全に実装できます。ただし、Kotlin では、コンパニオン オブジェクトはオプションの 1 つにすぎず、Java で静的メソッドを使用することは選択の余地がない場合があります。次にコンパニオンオブジェクトを紹介します。 Java を使用するときに、Java クラスの静的な 変数
メソッドがいつ初期化されるかに気づきましたか?静的メソッドが最初に呼び出されたときですか、それとも対応する Java クラスがロードされたときですか?答えは、Java クラスがロードされるときです (つまり、静的変数とメソッドを使用していなくても、Java クラスでインスタンス変数とメソッドを呼び出した場合、静的変数は初期化されています)。この現象は付随するものと表現するのが適切ではないでしょうか。

Kotlin では、クラス内に 2 種類のものがあると考えられます。1 つは Java クラスのインスタンス変数とメソッド、もう 1 つは Java クラスの静的変数とメソッドです。 Kotlin は静的インスタンスとメソッドをコンパニオン クラスにパッケージ化しており、それは次のようになります。以下に例を示します。

fun main(args: Array<String>) {
 Books.getBestSellers()
}
class Books(var name: String, val page: Int) {
  fun getWordCount()=page*100
  companion object ComBooks{
    var bestSellers=arrayOf("Harry Potter\r\t","Lord of the Rings\r\t")
    fun getBestSellers() {
      bestSellers.forEach{v->println(v)}
    }
  }
}
Books.ComBooks.getBestSellsers()?Books.getBestSellsers()?。 コンパニオン クラスは、Companion を使用して宣言され、コンパニオン オブジェクトが配置されているクラスにロードされ、Java の静的メンバーと同様に初期化されます。匿名にすることも、包含クラスと同じ名前にすることもできます。呼び出しには次の 2 種類があります:

3. 拡張関数

Java では、Utils クラスを作成することが多く、これらのクラスは、その機能を独自のプログラムと一致させるために、特定のオブジェクトに対して操作を実行します。ほとんどのメソッドは静的メソッドです。例:

public class Utils {

  public static boolean isEmpty(String string){
    return string != null && string.length() == 0;
  }

  public static boolean isWeakEmpty(String string){
    return isEmpty(string) && string.trim().length() == 0;
  }
}

もちろん、上記の 2 つのメソッドを使用してこれらの静的メソッドを実装できますが、もっと良い方法があります。

fun String.isEmpty() = this != null && this.length == 0;

fun String.isWeakEmpty()= this.isEmpty() && this.trim().length == 0

上記の 2 行のコードは、2 つの関数で String クラスを拡張しています。これらの 2 つの関数は、ネイティブ関数と同じように呼び出すことができます。コードは非常に美しいです。実際、拡張関数は String クラスの内部内容を変更せず、String に 2 つの静的関数を追加するだけですが、Java の Utils クラスと比較して可読性は大幅に向上しています。

4. オブジェクト宣言


このクラスのすべてのメソッド (場合によっては変数もある) は静的です。Java では、このメソッドをインスタンス化する必要はまったくありません。このカテゴリを静的クラスとして宣言することがよくあります。Kotlin でこの状況に対する適切な解決策はありますか?コンパニオン オブジェクトよりも優れたソリューションはありますか?もちろんあります。オブジェクト宣言は 1 つです。

オブジェクト宣言は非常に理解しやすいです。オブジェクトは次のような変数またはメソッドを使用して宣言します。Kotlin のオブジェクトは本当に強力であることがわかりました。誰もが注意すべき点の 1 つは、AppInfo は初めてアクセスされたときに遅延初期化されるということです。つまり、オブジェクトの宣言時に AppInfo は初期化されません。


5. まとめ

これだけ多くのメソッドを述べてきましたが、Kotlin に静的メソッドがないことを心配する人はいないでしょう? Kotlin が静的メソッドを備えているのは、単に静的メソッドの方が優れているからというだけではありません。さらに、Kotlin では、コードを効率的かつ美しくするために、実際の状況に応じて適切な方法を選択することもできます。


以上がJava や C# と同様に Kotlin で静的メソッドを実装する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。