2015-12-11 18 views
9

Gibt es einen aktuellen Überblick über Java 8 Features, die in Kotlin noch nicht unterstützt werden?Kotlin: Welche Funktionen von Java 8 werden noch nicht unterstützt?


Zum Beispiel kann eine Standardmethode wie Map#putIfAbsent Aufruf fehlschlägt (ungestützte Referenzfehler) zu kompilieren:

import java.util.* 

fun main(args: Array<String>) { 
    val x : Map<Int, Int> = HashMap<Int, Int>() 
    x.putIfAbsent(1, 2) 
} 

Wenn die Standard-Methode überschrieben wird, funktioniert es:

import java.util.* 

fun main(args: Array<String>) { 
    val x : HashMap<Int, Int> = HashMap<Int, Int>() 
    x.putIfAbsent(1, 2) 
} 

That ist, was ich durch Experimente herausgefunden habe, aber um zu entscheiden, ob die Migration von einer Java-8-Code-Basis zu Kotlin bereits möglich ist, wäre ein systematischer Überblick wertvoll.


Update: Der Code in meinem Beispiel durch die "Java Kotlin" Konverter erstellt wurde. Wie Benutzer2235698 darauf hingewiesen hat, ist Map<Int, Int> eine unveränderliche Kotlin-Karte. Trotzdem kann das Beispiel nicht kompiliert werden, wenn ich es in eine java.util.Map Karte ändere. Meine Behauptung, dass es etwas mit Standardmethoden zu tun hat, ist jedoch irreführend.

Da es über den Rahmen dieser Frage ist, öffnete ich eine weitere Frage, hier: Does java.util.HashMap not implement java.util.Map in Kotlin?

+6

anzeigen Unteraufgaben von https://youtrack.jetbrains.com/issue/KT-4778 –

+0

@JBNizet Dank, Ihr Link sehr gut. Ich denke, ich werde es in eine Community-Antwort umwandeln. –

+0

Diese Frage wird immer veraltet sein, die Community-Wiki-Antwort unten (und der Kommentar oben) sind die besten Orte, um dies zu verfolgen. –

Antwort

9

bekannt Java 8 Interoperabilitätsprobleme verfolgt werden als Teilaufgaben von this issue

3

Map ist unveränderlich und HashMap ist veränderbar in Kotlin, deshalb können Sie Schlüssel-Wert-Paar im ersten Fall nicht setzen.

More details

+0

Ja, ich habe gerade bemerkt, dass Map nicht java.util.Map ist. Wenn ich jedoch mein Beispiel in java.util.Map ändere, kann es immer noch nicht kompiliert werden. Ich habe es als separate Frage veröffentlicht: http://StackOverflow.com/q/34255329/783510 –

Verwandte Themen