2015-12-11 35 views
9

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?

+6

Vedi le sottoattività di https://youtrack.jetbrains.com/issue/KT-4778 –

+0

@JBNizet Grazie, il tuo link è molto buona. Penso che lo convertirò in una risposta comunitaria. –

+0

Questa domanda sarà sempre obsoleta, la risposta della community wiki qui sotto (e il commento sopra) sono i posti migliori per rintracciarlo. –

risposta

9

noti problemi di Java 8 di interoperabilità sono tracciati come attività secondarie di this issue

3

Map è immutabili e HashMap è mutabile in Kotlin, ecco perché non è possibile inserire coppia chiave-valore nel primo caso.

More details

+0

Sì, ho appena notato che Map non è java.util.Map. Tuttavia, se cambio il mio esempio in java.util.Map, non riesce ancora a compilare. L'ho postato come una domanda a parte: http://stackoverflow.com/q/34255329/783510 –