Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung, wie man statische Methoden in Kotlin ähnlich wie Java oder C# implementiert

Detaillierte Erklärung, wie man statische Methoden in Kotlin ähnlich wie Java oder C# implementiert

黄舟
黄舟Original
2017-06-04 09:41:351850Durchsuche

So implementieren Sie

statische -Methoden in Kotlin ähnlich wie Java oder C#. Dieser Artikel fasst mehrere Methoden zusammen, nämlich: Paketebene Funktion , Begleiter Objekt, Erweiterungsfunktionen und Objektdeklarationen. Dies erfordert, dass jeder je nach Situation eine Auswahl trifft.

Sie können viele solcher Artikel im Internet finden. Die offizielle Empfehlung sind Funktionen auf Paketebene, und einige Leute empfehlen die Verwendung von Begleitobjekten (Companion Klasse). Das sind gute Optionen, aber sie sind nicht perfekt, und wir haben in verschiedenen Situationen bessere Optionen. Ich habe mehrere Methoden zusammengefasst, nämlich: Funktionen auf Paketebene, Begleitobjekte, Erweiterungsfunktionen und Objektdeklarationen. Dies erfordert, dass jeder je nach Situation eine Auswahl trifft.

1. Funktionen auf Paketebene

Der Unterschied zwischen Kotlin und Java und C# besteht darin, dass Sie Funktionen direkt in der deklarieren können Paket. Die Methode ist die gleiche wie in der Kategorie, daher werde ich hier nicht auf Details eingehen. Es ist in der Tat eine sehr gute Wahl. Es eignet sich für Funktionen, die keine internen Klassen für den Datenaustausch enthalten müssen.

2. Begleitobjekt

Semantisch gesehen sind Begleitfunktionen den statischen Methoden in Java am ähnlichsten, sodass Begleitobjekte statische Methoden in Java vollständig implementieren können Inhalte der Klasse. Aber die Verwendung statischer Methoden in Java ist manchmal keine Wahl. In Kotlin sind Begleitobjekte nur eine unserer Optionen. Als nächstes werde ich die Begleitobjekte vorstellen.

Ist Ihnen bei der Verwendung von Java schon einmal aufgefallen, wann die statischen
Variablen und Methoden in Java-Klassen initialisiert werden? Ist es der erste Aufruf der statischen Methode oder das Laden der entsprechenden Java-Klasse? Die Antwort lautet, wenn die Java-Klasse geladen wird (d. h. wenn Sie die Instanzvariablen und -methoden in der Java-Klasse aufgerufen haben, auch wenn Sie keine statischen Variablen und Methoden verwendet haben, wurden die statischen Variablen initialisiert). Ist es nicht angebracht, dieses Phänomen als begleitend zu bezeichnen?

In Kotlin wird davon ausgegangen, dass es zwei Arten von Dingen in einer Klasse gibt: zum einen Instanzvariablen und -methoden in Java-Klassen und zum anderen statische Variablen und Methoden in Java-Klassen. Kotlin packt statische Instanzen und Methoden in eine Begleitklasse, und so sieht es aus. Nachfolgend finden Sie ein Beispiel:

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)}
    }
  }
}
Die Begleitklasse wird mit Companion deklariert. Sie wird in die Klasse geladen, in der sich das Begleitobjekt befindet, und das Begleitobjekt wird wie statische Java-Mitglieder initialisiert. Sie kann anonym sein oder denselben Namen wie die enthaltende Klasse haben. Es gibt zwei Arten von Aufrufen:

oder Books.ComBooks.getBestSellsers()?Books.getBestSellsers()?。

3. Erweiterungsfunktion

In Java schreiben wir oft Utils-Klassen Diese Klassen führen häufig Operationen an einem bestimmten Objekt aus, die seinen Funktionen und ihren eigenen Programmen entsprechen. Die meisten Methoden sind statische Methoden, zum Beispiel:

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;
  }
}
Natürlich können wir die beiden oben genannten Methoden verwenden, um diese statischen Methoden zu implementieren, aber wir haben einen besseren Weg.

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

fun String.isWeakEmpty()= this.isEmpty() && this.trim().length == 0
Die beiden oben genannten Codezeilen erweitern die String-Klasse um zwei Funktionen. Diese beiden Funktionen können wie ihre nativen Funktionen aufgerufen werden. Tatsächlich ändert die Erweiterungsfunktion den internen Inhalt der String-Klasse nicht und fügt String nur zwei statische Funktionen hinzu. Im Vergleich zur Utils-Klasse von Java wurde die Lesbarkeit jedoch erheblich verbessert.


4. Objektdeklaration

Betrachten Sie weiterhin die obige Utils-Klasse. Alle Methoden (und manchmal auch Variablen) in dieser Klasse sind statisch Methode muss überhaupt nicht instanziiert werden. In Java deklarieren wir diesen Typ häufig als statische Klasse. Gibt es eine gute Lösung für diese Situation? Gibt es eine bessere Lösung als Begleitobjekte? Natürlich gibt es eine Objektdeklaration.


Die Objektdeklaration ist sehr einfach zu verstehen. Zum Deklarieren eines Objekts können Variablen und Methoden verwendet werden, z. B.:

object AppInfo{
  var AppName = "Kotlin Message"
  var AppAuthor = "Riley Ge"
  fun toSimpleString() {
    println("AppName:$AppName,AppAuthor:$AppAuthor") 
  }
}
Discover Kotlin-Objekte Wie mächtig! Jeder sollte darauf achten, dass AppInfo beim ersten Zugriff verzögert initialisiert wird, was bedeutet, dass AppInfo nicht initialisiert wird, wenn das Objekt deklariert wird.


5. Zusammenfassung

Nach so vielen Methoden macht sich niemand Sorgen, dass Kotlin jetzt keine statischen Methoden hat, oder? Ich habe es nicht nur wegen ihm. Kann es besser machen. Darüber hinaus bietet Ihnen Kotlin mehr Auswahlmöglichkeiten. Sie können die geeignete Methode entsprechend Ihrer tatsächlichen Situation auswählen, um Ihren Code effizient und schön zu gestalten.


Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie man statische Methoden in Kotlin ähnlich wie Java oder C# implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn