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.
Vorerst habe ich alle <*> angehängt
before
var controller: Controller
after
var controller: Controller<*>
<\ > Scheint eine Abkürzung für \
before
var controller: Controller
after
var controller: Controller<Data>
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.
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)
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
}
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
Derjenige, dessen Argument index ist, ist removeAt
before
shapeList.remove(0)
after
shapeList.removeAt(0)
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
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)
}
}
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!!)
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)
Fügen Sie den Modifikator lateinit hinzu
before
private var currentShape: Array<Shape?>
after
private lateinit var currentShape: Array<Shape?>
before
Shape.judgeAll(currentShapes)
after
Shape.judgeAll(*currentShapes)
toArray toTypedArray
before
currentList.toArray(arrayOfNulls<Shape>(currentList.size))
after
currentList.toTypedArray()
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