Maîtriser Kotlin ~ Convertir un fichier Java en fichier Kotlin Road to Graduation ~ Partie 1

introduction

Lors de l'utilisation de Kotlin sur Android, etc., de nombreuses personnes effectuent une conversion automatique de Java avec "Convertir un fichier Java en fichier Kotlin". Cela fonctionne réellement, mais c'est un mémo pour aller plus loin et mieux utiliser Kotlin.

Cette fois, vous apprendrez la distribution intelligente. Version Kotlin: 1.3

Exemple de code avant la conversion Kotlin

Vous pourriez penser qu'il y avait un meilleur échantillon (transpiration), mais supposons que vous ayez un mélange de code Java et Kotlin comme celui-ci:

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)
        //Peut vérifier à la fois nul ou vide
        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)
    }
}

Exemple de code après la conversion Kotlin

Si cela est automatiquement converti et mis en correspondance avec la forme d'origine, il ressemblera sûrement à ceci ...

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)
    }
}

Qu'est-ce qui ne va pas

L'implémentation de la classe ResponseModle est devenue une implémentation plutôt agressive. Nullable est déballé (données? ...) par jugement même si la vérification nulle de ItemData est terminée. Seul NonNull peut être passé comme argument de la méthode de la classe ResponseLog. Développer forcé (... !!) pour éviter les erreurs de compilation. Je ne veux pas forcer le déballage car il a déjà été vérifié pour null.

Résolu par smart cast

Si vous utilisez Smart Cast, il se compilera sans déballage forcé.

ResponseModle.kt


class ResponseModle {

    fun receiveResponceBody(data: ItemData?) {
        //Fonte intelligente
        if (data !is ItemData) return
        //Fonte intelligente
        if (data.body is String) ResponseLog.showLength(data.body)
        // Kotlin1.Smartcast fonctionne avec isNullOrEmpty à partir de 3
        if (!data.subBody.isNullOrEmpty()) ResponseLog.showSubTitle(data.subBody)
    }
}

Mauvais exemple

Utilise l'opérateur Elvis pour éviter le déballage forcé ResponseLog.showSubTitle(data.subBody ?: "")

prime

Méthode d'implémentation simple utilisant let lors de l'attribution de valeurs

S'il existe une telle implémentation

ResponseModle.java


public class ResponseModle {

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

Convertir avec Convertir un fichier Java en fichier Kotlin

ResponseModle.kt


class ResponseModle {

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

Cependant, cela devient une implémentation de type Java. Si vous utilisez Kotlin avec beaucoup d'efforts, écrivez simplement en utilisant let

ResponseModle.kt


class ResponseModle {

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

Très simple!

Recommended Posts

Maîtriser Kotlin ~ Convertir un fichier Java en fichier Kotlin Road to Graduation ~ Partie 3
Maîtriser Kotlin ~ Convertir un fichier Java en fichier Kotlin Road to Graduation ~ Partie 2
Maîtriser Kotlin ~ Convertir un fichier Java en fichier Kotlin Road to Graduation ~ Partie 1
[Android] Convertir le code Java Android en Kotlin
Kotlin's Class part.2 à envoyer aux développeurs Java
Convertir toutes les applications Android (Java) en Kotlin
Ingénieur en route vers Java Partie 1 Introduction et construction de l'environnement
<java> Lire le fichier Zip et le convertir directement en chaîne
Comment convertir un fichier en tableau d'octets en Java
Comment convertir la base Java
[Java] Convertir ArrayList en tableau
Road to Java Engineer Part2 Quel type de langage est Java?
Java pour apprendre avec les ramen [Partie 1]
En route vers l'acquisition de Java SE 11 Silver
Comment convertir un fichier erb en haml
[Java] Convertir 1 en N liste en carte
[Android] Convertissez Map en JSON à l'aide de GSON avec Kotlin et Java
La route de JavaScript à Java
[Java] Convertit un tableau en ArrayList * Attention
La voie de la création de services Web (partie 2)
Java SE8 Silver ~ La route à franchir ~
Convertir des fichiers SVG en fichiers PNG en Java
Fonctions de portée Kotlin à envoyer aux développeurs Java
Exemple pour décompresser le fichier gz en Java
Mémo pour la migration de Java vers Kotlin
<Java> Quiz pour convertir par lots les noms de fichiers séparés par une chaîne de caractères spécifique avec une partie du nom de fichier
Fonctions Kotlin et lambdas à envoyer aux développeurs Java
[Ruby] Comment convertir un fichier CSV en Yaml (Yml)
Présentation de Kotlin à un projet Java Maven existant
Migrer de Java vers Kotlin côté serveur + Spring-boot
Écrire dans un fichier en utilisant ShiftJIS ・ Lire un fichier (Kotlin / JVM)
[Java] Convertit le code DB en valeur de code à l'aide d'énum
Paramètres initiaux pour la réécriture de projets Java sur Kotlin
Comment convertir un contrat de solidité en une classe de contrat Java
Histoire d'essayer de faire fonctionner le fichier JAVA
Premiers pas avec Kotlin à envoyer aux développeurs Java
Ce que j'ai fait lorsque j'ai converti Java en Kotlin
Convertir les beans imbriqués Java au format aaa.bbb [0] .ccc
Où les programmeurs Java ont tendance à trébucher sur Kotlin
Comment écrire Java String # getBytes dans Kotlin?
Ce que des personnes inexpérimentées en Java ont fait pour étudier Kotlin
[Java] Convertir et importer des valeurs de fichier avec OpenCSV
La voie de la création d'un service Web (partie 1)