Esiste una panoramica aggiornata delle funzionalità di Java 8, che non sono ancora supportate in Kotlin?Kotlin: quali funzionalità di Java 8 non sono ancora supportate?
Ad esempio, la chiamata di un metodo di default come Map#putIfAbsent fallisce la compilazione (errore non supportato di riferimento):
import java.util.*
fun main(args: Array<String>) {
val x : Map<Int, Int> = HashMap<Int, Int>()
x.putIfAbsent(1, 2)
}
Se il metodo di default viene sovrascritto, funziona:
import java.util.*
fun main(args: Array<String>) {
val x : HashMap<Int, Int> = HashMap<Int, Int>()
x.putIfAbsent(1, 2)
}
Quello è quello che ho scoperto dagli esperimenti, ma per decidere se la migrazione da una base di codice Java a Kotlin è già possibile, una panoramica sistematica sarebbe preziosa.
Update: Il codice nel mio esempio è stato creato dal convertitore "Java per Kotlin". Come ha sottolineato l'utente2235698, Map<Int, Int>
è una mappa Kotlin immutabile. Tuttavia, l'esempio non riesce a compilare quando lo cambio in una mappa java.util.Map
. La mia affermazione che deve fare qualcosa con i metodi predefiniti, tuttavia, è fuorviante.
Come è oltre la portata di questa domanda, ho aperto una domanda di follow-up, qui: Does java.util.HashMap not implement java.util.Map in Kotlin?
Vedi le sottoattività di https://youtrack.jetbrains.com/issue/KT-4778 –
@JBNizet Grazie, il tuo link è molto buona. Penso che lo convertirò in una risposta comunitaria. –
Questa domanda sarà sempre obsoleta, la risposta della community wiki qui sotto (e il commento sopra) sono i posti migliori per rintracciarlo. –