2015-12-11 19 views
9

Henüz Kotlin'de desteklenmeyen Java 8 özelliklerinin güncel bir değerlendirmesi var mı? ÖrneğinKotlin: Java 8'in hangi özellikleri henüz desteklenmiyor?


, Map#putIfAbsent gibi varsayılan bir yöntem derlenmeyecektir çağıran (desteklenmeyen referans hatası): Varsayılan yöntem geçersiz kılınır

import java.util.* 

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

, çalışır:

import java.util.* 

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

O deneylerle öğrendiğim şeydir, ancak Java 8 kodundan Kotlin'e geçmenin mümkün olup olmadığına karar vermek için sistematik bir genel bakış değerli olacaktır.


Güncelleme: benim örnekte kodu "Java KOTLIN için" dönüştürücü tarafından yaratıldı. User2235698'in işaret ettiği gibi, Map<Int, Int>, değişmez bir Kotlin haritasıdır. Yine de, ben bir java.util.Map haritasına değiştirdiğimde örnek derlenemiyor. Bununla birlikte, varsayılan yöntemlerle bir şey yapmak zorunda olduğum iddiası yanıltıcıdır. Bu sorunun kapsamı dışındadır gibi

, burada bir takip sorusunu açtı: Does java.util.HashMap not implement java.util.Map in Kotlin?

+6

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

+0

@JBNizet Teşekkür alt görevler olduğuna bakın, bağlantı çok iyidir. Bence bunu bir topluluk cevabına dönüştüreceğim. –

+0

Bu soru her zaman güncel olmayacak, aşağıda topluluk wiki yanıtı (ve yukarıdaki yorum) bunu izlemek için en iyi yerlerdir. –

cevap

9

bilinen Java 8 çalışabilirlik sorunları this issue

3

Map ait alt görevler olarak izlendiği edilir değişmez ve Kotlin'de HashMapmutable, bu nedenle ilk durumda anahtar-değer çifti koyamazsınız.

More details

+0

Evet, sadece Map'in java.util.Map olmadığını fark ettim. Ancak, örneğimi java.util.Map olarak değiştirirsem, yine de derleme başarısız olur. Bunu ayrı bir soru olarak gönderdim: http://stackoverflow.com/q/34255329/783510 –