Was ich getan habe, als ich Java zu Kotlin konvertiert habe

Überblick

Ich schreibe auf, wie ich den Fehler beheben kann, den ich beim Konvertieren von Java nach Kotlin mit der Inttellij-Funktion erhalten habe. Ich kann es später organisieren. Da ich ein Anfänger von Kotlin war und den Fehler vorerst gelöscht habe, scheint es einen Ort zu geben, an dem er programmatisch schlecht geschrieben ist. Bitte lassen Sie mich wissen, ob es eine bessere Lösung gibt.

Fallstudie

Wenn Sie Generika haben, müssen Sie diese unbedingt anziehen

Vorerst habe ich alle <*> angehängt

before


var controller: Controller

after


var controller: Controller<*>

Wenn Sie die Generika auf <*> setzen, tritt ein Fehler in der Methode auf, die die Generika als Argument verwendet.

<\ > Scheint eine Abkürzung für \ zu sein, und out scheint eine Einschränkung zu sein, die Generika nur als Rückgabewert verwendet. Es gab einen großen Unterschied zwischen Generika und Java, und ich konnte ihn nicht lösen, indem ich aufhörte zu denken. Vorerst hatte ich keine andere Wahl, als mir das Programm anzusehen und etwas anderes als <> einzufügen. Ich bin mir nicht sicher über Kotlins Generika.

before


var controller: Controller

after


var controller: Controller<Data>

Ich kann keine kreisförmigen Generika haben

Diesmal war es nur verschwenderisch, also habe ich eine Seite gelöscht und es gelöst. Es gab eine Methode, um einen neuen Typ zu erstellen und ihn mit Gewalt zu lösen, aber sprachlich geht es vielleicht darum, kreisförmige Generika zu erstellen.

Getter Setter

Es verschwand durch Bekehrung. Schreiben Sie in Kotlin, um auf das Feld so zuzugreifen, wie es ist. Die Sichtbarkeit scheint schreibgeschützt zu sein, wenn ein privater Satz deklariert wird.

before


game.getFinishStatus()

after


game.finishStatus

before


game.setFinishStatus(FinishStatus(true))

after


game.finishStatus=FinishStatus(true)

überschreiben

Sie müssen den Überschreibungsmodifikator zur überschriebenen Methode hinzufügen. Es wird normalerweise automatisch angehängt, aber es gab einige, die dies nicht taten. Können Sie automatisch Methodenüberschreibungen für Objekte wie toString hinzufügen? Einige von ihnen waren nicht einmal in ihrer eigenen Klasse gebunden. Ich bin mir nicht sicher.

before


    fun toString(): String {
        return text
    }

after


    override fun toString(): String {
        return text
    }

Liste hinzufügen

In der Standardliste von Kotlin können Sie keine Elemente hinzufügen oder entfernen. Wenn Sie es in Java als Liste deklarieren, wird es in die Standardliste konvertiert, sodass add nicht verwendet werden kann. Schreiben Sie die Deklaration in MutableList um.

before


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

after


private var commandList: MutableList<IN>? = null
commandList!!.add(command)//Kein Fehler

Liste entfernen

Derjenige, dessen Argument index ist, ist removeAt

before


shapeList.remove(0)

after


shapeList.removeAt(0)

Besetzung

Es verschwand aus irgendeinem Grund. Es scheint kein Problem zu geben, wenn Sie die Besetzung löschen, wenn Sie eine sichere Besetzung durchführen, aber es ist ein Fehler aufgetreten. Vielleicht war es eine Besetzung mit Generics.

before


cd//ursprünglich(IN)cd //IN ist Generika

after


cd as IN

Argumentzuweisung mit variabler Länge

Kann nicht zugewiesen werden, da sich der Typ zwischen dem Argument variabler Länge und dem normalerweise deklarierten Array unterscheidet. Erstellen Sie ein neues Array aus Argumenten variabler Länge und weisen Sie es zu.

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

Nullprüfung des Methodenarguments

Null-Check-bezogene Dinge werden normalerweise automatisch ausgeführt, aber es scheint, dass Methodenargumente nicht ausgeführt werden?

before


        game.addShape(shape)//Shape?Deshalb heißt es nein

after


        game.addShape(shape!!)

Array, das später initialisiert werden soll

Wenn Sie aus der Null entfernen möchten, überprüfen Sie ein Array, das zuerst mit Null und dann mit Werten gefüllt wird (was dazu führt, dass Null nicht eingegeben wird). Wenn Sie Arrays.fill oder etwas verwenden. Beim Initialisieren des Arrays einfügen

before


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

after


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

static import Es scheint, dass Sie eine statische Methode nicht aufrufen können, ohne einen Klassennamen mit statischem Import anzugeben.

before


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

after


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

Derjenige, der keine Null benötigt, aber später initialisiert

Fügen Sie den Modifikator lateinit hinzu

before


private var currentShape: Array<Shape?>

after


private lateinit var currentShape: Array<Shape?>

Fügen Sie das Array direkt in das Argument variabler Länge ein

before


 Shape.judgeAll(currentShapes)

after


 Shape.judgeAll(*currentShapes)

toArray toTypedArray

before


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

after


currentList.toTypedArray()

Referenz

Ich habe alle gegeben, die ich vorerst gesehen habe, daher haben einige von ihnen nichts mit den Informationen zu tun, die ich hier geschrieben habe, und einige habe ich definitiv vergessen. 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

Was ich getan habe, als ich Java zu Kotlin konvertiert habe
Woran ich dachte, als ich anfing, von Java nach Kotlin zu migrieren
Was Java-Unerfahrene getan haben, um Kotlin zu studieren
[java] Was ich getan habe, als ich Listen in meiner eigenen Klasse verglichen habe
Ich habe Java gemacht, um (a == 1 && a == 2 && a == 3) immer wahr zu machen
Zusammenfassung der Punkte, über die ich mir bei der Migration von Java nach Kotlin Sorgen gemacht habe
paiza Was ich getan habe, um Ruby B Rang zu werden
Was ich beim Erstellen eines Servers in Java gelernt habe
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
Ich habe versucht herauszufinden, was sich in Java 9 geändert hat
Was ich über Java 8 recherchiert habe
Was ich über Java 6 recherchiert habe
Was ich über Java 9 recherchiert habe
Was ich über Kotlin gelernt habe
Was ich über Java 5 recherchiert habe
Wovon ich bei der Einführung der JNI-Bibliothek süchtig war
Was ich beim Update auf Spring Boot 1.5.12 behoben habe ・ Wovon ich süchtig war
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
IntelliJ gradle 2.2 → 2.6 Was ich getan habe, als ich über die Umgebungsmigration gestolpert bin
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
Kotlin-Klasse zum Senden an Java-Entwickler
Ich habe versucht, mit Java zu interagieren
Was ich mit Java Gold gelernt habe
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Was ich mit Java Silver gelernt habe
Was ich über Java-Lernen recherchiert habe
[Android] Konvertieren Sie Android Java-Code in Kotlin
Ich habe jetzt versucht, Java 8 zusammenzufassen
Was tun, wenn eine javax.batch.operations.JobStartException auftritt?
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Über das, was ich beim Erstellen einer CLJ-Datei mit Clojure getan habe
Was ich getan habe, als die DB nicht mit Docker-Compose gestartet wurde
Ich habe versucht, die Fehlermeldung beim Ausführen von Eclipse (Java) zu übersetzen.
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Wovon ich süchtig war, als ich die Google-Authentifizierung mit Rails implementierte
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
Was ich oft mache, wenn ich Probleme beim Benennen mit Java habe (etc.)
Kotlins Klasse Teil 2 zum Senden an Java-Entwickler
Memorandum: Wovon ich süchtig war, als ich auf die Accounting Freee API traf
Was ich dachte, als ich den Eingabewert des Benutzers an die Service-Klasse übergab
Was mir bei der Verwendung der Schnittstelle einer Funktion mit Standardargumenten in Kotlin aus Java nicht gefällt
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Konvertieren Sie alle Android-Apps (Java) in Kotlin
Was ich getan habe, um den Oracle Certified Java Programmer, Silver SE 8, zu erhalten
Was tun, wenn eine javax.el.PropertyNotWritableException auftritt?
Was ich getan habe, als JSF keine Datenbankinformationen in der Ansicht anzeigen konnte
Kotlin-Scope-Funktionen zum Senden an Java-Entwickler
Ich habe die OpenCV-Kamerakalibrierung in Java durchgeführt
Ich möchte Java-Updates insgesamt stoppen
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
Was ist Docker? Ich habe versucht zusammenzufassen
Vorsichtsmaßnahmen bei der Migration von VB6.0 auf JAVA
Was Java-Programmierer mit Kotlin nützlich finden
Ich ging zum Java Women's Club # 1
[* Java *] Ich ging zum JJUG CCC 2017 Herbst
undefinierte Methode Was tun, wenn Sie "user_signed_in" erhalten?
Was ich aus der Java-Geldberechnung gelernt habe
Memo für die Migration von Java nach Kotlin