Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 1

Einführung

Wenn Sie Kotlin unter Android usw. verwenden, gibt es viele Leute, die automatisch mit "Java-Datei in Kotlin-Datei konvertieren" von Java konvertieren. Es funktioniert tatsächlich, aber es ist ein Memo, um noch einen Schritt weiter zu gehen und Kotlin besser zu nutzen.

Dieses Mal lernst du Smart Cast. Kotlin-Version: 1.3

Beispielcode vor der Kotlin-Konvertierung

Sie könnten denken, es gäbe ein besseres Beispiel (Schweiß), aber nehmen wir an, Sie haben eine Mischung aus Java- und Kotlin-Code wie folgt:

ResponseModle.java


public class ResponseModle {

    public void receiveResponseBody(ItemData data) {
        if (data == null) {
            return;
        }

        if (data.getBody() != null) {
            ResponseLog.INSTANCE.showLength(data.getBody());
        }

        // android.text.TextUtils.isEmpty(CharSequence str)
        //Kann sowohl null als auch leer prüfen
        if (!TextUtils.isEmpty(data.subBody)) {
            ResponseLog.INSTANCE.showSubTitle(data.getSubBody());
        }
    }

ItemData.java


public class ItemData {

    private String body = null;

    private String subBody = null;

    public ItemData(String body, String subBody) {
        this.body = body;
        this.subBody = subBody;
    }

    public String getBody() {
        return body;
    }

    public String getSubBody() {
        return subBody;
    }
}

ResponseLog.kt


object ResponseLog {

    public fun showLength(title: String) {
        System.out.print(title.length)
    }

    public fun showSubTitle(subTitle: String) {
        System.out.print(subTitle)
    }
}

Beispielcode nach Kotlin-Konvertierung

Wenn dies automatisch konvertiert und an die ursprüngliche Form angepasst wird, wird es sicherlich so aussehen ...

ResponseModle.kt


class ResponseModle {

    fun receiveResponceBody(data: ItemData?) {
        if (data == null) {
            return
        }

        if (data?.body != null) {
            ResponseLog.showLength(data.body)
        }

        if (!TextUtils.isEmpty(data?.subBody)) {
            ResponseLog.showSubTitle(data.subBody!!)
        }
    }
}

ItemData.kt


data class ItemData(val body: String? = null, val subBody: String? = null)

ResponseLog.kt


object ResponseLog {

    public fun showLength(title: String) {
        System.out.print(title.length)
    }

    public fun showSubTitle(subTitle: String) {
        System.out.print(subTitle)
    }
}

Was ist los

Die Implementierung der ResponseModle-Klasse ist etwas aggressiv geworden. Nullable wird durch Beurteilung entpackt (Daten? ...), obwohl die Nullprüfung von ItemData abgeschlossen ist. Nur NonNull kann als Argument der Methode der ResponseLog-Klasse übergeben werden. Erzwungenes Auspacken (... !!), um Kompilierungsfehler zu vermeiden. Ich möchte das Auspacken nicht erzwingen, da es bereits auf null geprüft wurde.

Gelöst von Smart Cast

Wenn Sie Smart Cast verwenden, wird es ohne erzwungenes Auspacken kompiliert.

ResponseModle.kt


class ResponseModle {

    fun receiveResponceBody(data: ItemData?) {
        //Intelligente Besetzung
        if (data !is ItemData) return
        //Intelligente Besetzung
        if (data.body is String) ResponseLog.showLength(data.body)
        // Kotlin1.Smartcast funktioniert mit isNullOrEmpty ab 3
        if (!data.subBody.isNullOrEmpty()) ResponseLog.showSubTitle(data.subBody)
    }
}

Schlechtes Beispiel

Verwendet den Elvis-Operator, um ein erzwungenes Auspacken zu vermeiden ResponseLog.showSubTitle(data.subBody ?: "")

Bonus

Einfache Implementierungsmethode mit let beim Zuweisen von Werten

Wenn es eine solche Implementierung gibt

ResponseModle.java


public class ResponseModle {

    public void receiveResponseBody(ItemData data) {
        String body;
        if (data.getBody() == null) {
            return;
        } else {
            body = "OK";
        }
        ResponseLog.INSTANCE.showLength(body);
    }
}

Konvertieren mit Java-Datei in Kotlin-Datei konvertieren

ResponseModle.kt


class ResponseModle {

    fun receiveResponceBody(data: ItemData?) {
        val body: String
        if (data?.body == null) {
            return
        } else {
            body = "OK"
        }
        ResponseLog.showLength(body);
}

Es wird jedoch eine Java-ähnliche Implementierung. Wenn Sie Kotlin mit viel Aufwand verwenden, schreiben Sie einfach mit let

ResponseModle.kt


class ResponseModle {

    fun receiveResponceBody(data: ItemData?) {
        val body = data?.body?.let { "OK" } ?: return
        ResponseLog.showLength(body);
}

Sehr einfach!

Recommended Posts

Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 3
Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 2
Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 1
[Android] Konvertieren Sie Android Java-Code in Kotlin
Kotlins Klasse Teil 2 zum Senden an Java-Entwickler
Konvertieren Sie alle Android-Apps (Java) in Kotlin
Road to Java Engineer Teil 1 Einführung & Umgebungskonstruktion
<java> Zip-Datei lesen und direkt in String konvertieren
So konvertieren Sie eine Datei in ein Byte-Array in Java
So konvertieren Sie Java Base
[Java] Konvertiert ArrayList in Array
Road to Java Engineer Part2 Was für eine Sprache ist Java?
Java mit Ramen lernen [Teil 1]
Straße nach Java SE 11 Silberakquisition
So konvertieren Sie erb-Datei in haml
[Java] Konvertiere 1 in N Liste in Karte
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
Der Weg von JavaScript nach Java
[Java] Konvertieren Sie ein Array in ArrayList * Achtung
Der Weg zum Erstellen eines Webdienstes (Teil 2)
Java SE8 Silber ~ Der Weg zum Pass ~
Konvertieren Sie SVG-Dateien in Java in PNG-Dateien
Kotlin-Scope-Funktionen zum Senden an Java-Entwickler
Beispiel zum Entpacken einer gz-Datei in Java
Memo für die Migration von Java nach Kotlin
<Java> Quiz zum Batch-Konvertieren von Dateinamen, die durch eine bestimmte Zeichenfolge mit einem Teil des Dateinamens getrennt sind
Kotlin-Funktionen und Lambdas zum Senden an Java-Entwickler
[Ruby] So konvertieren Sie eine CSV-Datei in Yaml (Yml)
Einführung in Kotlin in ein bestehendes Java Maven-Projekt
Migrieren Sie von Java zu Server Side Kotlin + Spring-Boot
Mit ShiftJIS in Datei schreiben ・ Datei lesen (Kotlin / JVM)
[Java] Konvertieren Sie DB-Code mit enum in einen Codewert
Grundeinstellungen für das Umschreiben von Java-Projekten in Kotlin
So konvertieren Sie einen Soliditätsvertrag in eine Java-Vertragsklasse
Die Geschichte des Versuchs, JAVA File zu bedienen
Erste Schritte mit Kotlin zum Senden an Java-Entwickler
Was ich getan habe, als ich Java zu Kotlin konvertiert habe
Konvertieren Sie verschachtelte Java-Beans in das Format aaa.bbb [0] .ccc
Wo Java-Programmierer dazu neigen, über Kotlin zu stolpern
Wie schreibe ich Java String # getBytes in Kotlin?
Was Java-Unerfahrene getan haben, um Kotlin zu studieren
[Java] Konvertieren und Importieren von Dateiwerten mit OpenCSV
Der Weg zum Erstellen eines Webdienstes (Teil 1)