ホームページ バックエンド開発 C#.Net チュートリアル Java や C# と同様に Kotlin で静的メソッドを実装する方法の詳細な説明

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

Jun 04, 2017 am 09:41 AM

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

XMLを単語に変換する方法 XMLを単語に変換する方法 Apr 03, 2025 am 08:15 AM

XMLを単語に変換するには、Microsoft Wordの使用、XMLコンバーターの使用、またはプログラミング言語の使用方法が3つあります。

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

XML形式を開く方法 XML形式を開く方法 Apr 02, 2025 pm 09:00 PM

ほとんどのテキストエディターを使用して、XMLファイルを開きます。より直感的なツリーディスプレイが必要な場合は、酸素XMLエディターやXMLSPYなどのXMLエディターを使用できます。プログラムでXMLデータを処理する場合、プログラミング言語(Pythonなど)やXMLライブラリ(XML.ETREE.ELEMENTTREEなど)を使用して解析する必要があります。

XMLの形式を変更する方法 XMLの形式を変更する方法 Apr 03, 2025 am 08:42 AM

XML形式を変更する方法はいくつかあります。Atepadなどのテキストエディターを使用して手動で編集する。 XmlBeautifierなどのオンラインまたはデスクトップXMLフォーマットツールを使用して自動的にフォーマットします。 XSLTなどのXML変換ツールを使用して変換ルールを定義します。または、Pythonなどのプログラミング言語を使用して解析および操作します。元のファイルを変更してバックアップするときは注意してください。

Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Feb 07, 2025 pm 12:11 PM

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。

See all articles