Ce que j'ai fait lorsque j'ai converti Java en Kotlin

Aperçu

Je suis en train de griffonner comment résoudre l'erreur que j'ai eue lors de la conversion de Java à Kotlin avec la fonctionnalité Inttellij. Je peux l'organiser plus tard. Puisque j'étais un débutant de Kotlin et que je venais d'effacer l'erreur pour le moment, il semble y avoir un endroit où il est mal écrit par programmation. Veuillez me faire savoir s'il existe une meilleure solution.

Étude de cas

Si vous avez des génériques, vous devez absolument les mettre

Pour le moment, j'ai attaché tout <*>

before


var controller: Controller

after


var controller: Controller<*>

Si vous définissez les génériques sur <*>, une erreur se produira dans la méthode qui prend les génériques comme argument.

<\ > Semble être une abréviation pour \ , et out semble être une restriction qui n'utilise les génériques que comme valeur de retour. Il y avait une grande différence entre les génériques et Java, et je ne pouvais pas la résoudre en arrêtant de réfléchir. Pour le moment, je n'avais pas d'autre choix que de regarder le programme et de mettre autre chose que <>. Je ne suis pas sûr des génériques de Kotlin.

before


var controller: Controller

after


var controller: Controller<Data>

Je ne peux pas avoir de génériques circulaires

Cette fois, c'était juste du gaspillage, alors j'ai effacé un côté et l'ai résolu. Il y avait une méthode pour créer un nouveau type et le résoudre de force, mais linguistiquement, il s'agit peut-être de créer un générique circulaire.

Setter Setter

Il a disparu par conversion. Dans Kotlin, écrivez pour accéder au champ tel quel. La visibilité semble être en lecture seule en déclarant un ensemble privé.

before


game.getFinishStatus()

after


game.finishStatus

before


game.setFinishStatus(FinishStatus(true))

after


game.finishStatus=FinishStatus(true)

passer outre

Les méthodes de remplacement doivent avoir le modificateur de remplacement. Il est généralement attaché automatiquement, mais certains ne l'ont pas fait. Pouvez-vous ajouter automatiquement des substitutions de méthode pour des objets tels que toString? Certains d'entre eux n'étaient même pas attachés à leur propre classe. Je ne suis pas sûr.

before


    fun toString(): String {
        return text
    }

after


    override fun toString(): String {
        return text
    }

ajouter une liste

La liste par défaut de Kotlin ne vous permet pas d'ajouter ou de supprimer des éléments. Si vous le déclarez comme List en Java, il sera converti dans la liste par défaut, donc add ne peut pas être utilisé. Réécrivez la déclaration dans MutableList.

before


private var commandList: List<IN>? = null
commandList!!.add(command)//Erreur

after


private var commandList: MutableList<IN>? = null
commandList!!.add(command)//Pas d'erreur

liste supprimer

Celui dont l'argument est index est removeAt

before


shapeList.remove(0)

after


shapeList.removeAt(0)

jeter

Il a disparu pour une raison quelconque. Il semble qu'il n'y ait pas de problème si vous supprimez la distribution si vous effectuez une distribution sécurisée, mais il y a eu une erreur. C'était peut-être un casting utilisant Generics.

before


cd//à l'origine(IN)cd //IN est générique

after


cd as IN

Affectation d'arguments de longueur variable

Ne peut pas être attribué car le type est différent entre l'argument de longueur variable et le tableau normalement déclaré. Créez un nouveau tableau à partir d'arguments de longueur variable et assignez.

before


class ControllerGroup(vararg controllers: Controller<*>) {
    private val controllers: Array<Controller<*>>
    init {
        this.controllers = controllers
    }
}

after


class ControllerGroup(vararg controllers: Controller<*>) {
    private val controllers: Array<Controller<*>>
    init {
        this.controllers = arrayOf(*controllers)
    }
}

Vérification nulle de l'argument de méthode

Les choses liées aux vérifications nulles sont généralement effectuées automatiquement, mais il semble que les arguments de méthode ne soient pas terminés?

before


        game.addShape(shape)//Shape?C'est pourquoi il est dit non

after


        game.addShape(shape!!)

Tableau à initialiser ultérieurement

Lorsque vous souhaitez supprimer de la valeur Null, cochez un tableau qui est d'abord rempli avec Null, puis rempli de valeurs (ce qui entraîne la non-saisie de Null). Si vous utilisez Arrays.fill ou quelque chose. Insérer lors de l'initialisation de la baie

before


val results = arrayOfNulls<RPSResult>(3)
Arrays.fill(results,RPSResult.DRAW)

after


val results = Array<RPSResult>(3,{RPSResult.DRAW})

static import Il semble que vous ne pouvez pas appeler une méthode statique sans donner un nom de classe avec une importation statique.

before


import game.rps.shape.Shape.*
///////////////////////////////
val results = judgeAll(SCISSOR, SCISSOR, SCISSOR, SCISSOR)

after


val results = Shape.judgeAll(SCISSOR, SCISSOR, SCISSOR, SCISSOR)

Celui qui n'a pas besoin de null mais s'initialise plus tard

Ajouter un modificateur lateinit

before


private var currentShape: Array<Shape?>

after


private lateinit var currentShape: Array<Shape?>

Mettez le tableau directement dans l'argument de longueur variable

before


 Shape.judgeAll(currentShapes)

after


 Shape.judgeAll(*currentShapes)

toArray toTypedArray

before


currentList.toArray(arrayOfNulls<Shape>(currentList.size))

after


currentList.toTypedArray()

référence

J'ai donné tous ceux que j'ai vus pour le moment, donc certains d'entre eux n'ont rien à voir avec les informations que j'ai écrites ici, et j'en ai définitivement oublié certains. https://qiita.com/k5n/items/c8bf7a507b64f20eebd0 https://qiita.com/tasogarei/items/266ecf02576d48fc69f6 https://stackoverflow.com/questions/46682455/how-to-solve-violation-of-finite-bound-restriction-in-kotlin https://qiita.com/ssuzaki/items/8a550fca6775c1e6e147 https://qiita.com/k5n/items/18adb5c3503a54e96c22 https://qiita.com/ke__kyukyun1828/items/3832d0bf42e6f7ef150a https://qiita.com/koher/items/d9411a00986f14683a3f https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/packages.html https://qiita.com/k5n/items/cc0377b75d8537ef8a85

Recommended Posts

Ce que j'ai fait lorsque j'ai converti Java en Kotlin
Ce à quoi j'ai pensé lorsque j'ai commencé à migrer de Java vers Kotlin
Ce que des personnes inexpérimentées en Java ont fait pour étudier Kotlin
[java] Ce que j'ai fait en comparant des listes dans ma propre classe
Je l'ai fait en Java pour toujours rendre (a == 1 && a == 2 && a == 3) vrai
Résumé des points qui m'inquiétaient lors de la migration de Java vers Kotlin
paiza Ce que j'ai fait pour devenir Ruby B rang
Ce que j'ai appris lors de la création d'un serveur en Java
Je veux faire des transitions d'écran avec kotlin et java!
J'ai essayé de découvrir ce qui avait changé dans Java 9
Ce que j'ai recherché sur Java 8
Ce que j'ai recherché sur Java 6
Ce que j'ai recherché sur Java 9
Ce que j'ai appris sur Kotlin
Ce que j'ai recherché sur Java 5
Ce à quoi j'étais accro lors de l'introduction de la bibliothèque JNI
Ce que j'ai corrigé lors de la mise à jour vers Spring Boot 1.5.12 ・ Ce à quoi j'étais accro
J'ai essayé de résumer les bases de kotlin et java
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
IntelliJ gradle 2.2 → 2.6 Ce que j'ai fait lorsque je suis tombé sur la migration de l'environnement
Je veux implémenter diverses fonctions avec kotlin et java!
Classe Kotlin à envoyer aux développeurs Java
J'ai essayé d'interagir avec Java
Ce que j'ai appris avec Java Gold
J'ai essayé de résumer l'apprentissage Java (1)
Ce que j'ai appris avec Java Silver
Ce que j'ai recherché sur l'apprentissage Java
[Android] Convertir le code Java Android en Kotlin
J'ai essayé de résumer Java 8 maintenant
Que faire lorsqu'une exception javax.batch.operations.JobStartException se produit
Je veux revenir à l'écran précédent avec kotlin et java!
À propos de ce que j'ai fait lors de la création d'un fichier .clj avec Clojure
Ce que j'ai fait lorsque la base de données n'a pas démarré avec docker-compose up
J'ai essayé de traduire le message d'erreur lors de l'exécution d'Eclipse (Java)
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Ce à quoi j'étais accro lors de la mise en œuvre de l'authentification Google avec des rails
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
Ce que je fais souvent quand j'ai du mal à nommer avec Java (etc.)
Kotlin's Class part.2 à envoyer aux développeurs Java
Mémorandum: Ce à quoi j'étais accro quand j'ai frappé l'API de comptabilité freee
Ce que j'ai pensé en passant la valeur d'entrée de l'utilisateur à la classe Service
Ce que je n'aime pas lors de l'utilisation de l'interface d'une fonction avec des arguments par défaut dans Kotlin depuis Java
J'ai essayé de résumer les expressions Java lambda
Convertir toutes les applications Android (Java) en Kotlin
Ce que j'ai fait pour obtenir le programmeur Java certifié Oracle, Silver SE 8
Que faire lorsqu'une exception javax.el.PropertyNotWritableException se produit
Ce que j'ai fait lorsque JSF ne pouvait pas afficher les informations de la base de données dans la vue
Fonctions de portée Kotlin à envoyer aux développeurs Java
J'ai fait l'étalonnage de la caméra OpenCV en Java
Je veux arrêter complètement les mises à jour Java
Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java
Qu'est-ce que Docker? J'ai essayé de résumer
Précautions lors de la migration de VB6.0 vers JAVA
Ce que les programmeurs Java trouvent utile avec Kotlin
Je suis allé au Java Women's Club # 1
[* Java *] Je suis allé au JJUG CCC 2017 Automne
Que faire lorsque la méthode non définie ʻuser_signed_in? '
Ce que j'ai appris du calcul monétaire Java
Mémo pour la migration de Java vers Kotlin