2016-06-04 18 views
8

, FastUtil en IntArrayList hem int (ilkel) ve Integer (kutu) kabul eden bir push yöntemi vardır, ama Kotlin bu her ikisi de aynı işlevi push(Int) olarak, bu nedenle de tüm işlev belirsiz olarak işlev kullanamaz görür.Kotlin: Java kütüphanesi hem ilkel hem de kutulu tipte aşırı yük olduğunda ne yapabilirim? Örneğin

Java kitaplığı hem ilkel hem de kutulu tip için aşırı yük olduğunda ne yapmalıyım?

(I add(int) yöntemi kullanabilirsiniz farkındayım ps. Ben gelecekte böyle bir sorun rastlamak ne yapmanız gerektiği arayışı içinde değilim.)

cevap

1

sunmasını bir Java sınıfı yazma denediniz aracı olarak mı? Yani, kendi java sınıfınızı, Kotlin'in görmesini istediğiniz yöntemle yazın, sonra bu yöntemi Kotlin kodunuzdan arayın.

+1

O uygulanabilir bir çözümdür, ancak daha kolay bir yol olduğundan şüphelenmiyor musunuz? – Jire

9

Java bu yöntemleri göz önünde bulundurun:

void f(int x) { } 
void f(Integer y) { } 

KOTLIN olarak,

f(x: Int) 
f(x: Int!) 

olarak görülen, ikinci yöntem , null karşılık gelecek olabilir, yani platform type bir parametresi vardır Integer.

İlki basitçe geçti KOTLIN Int ile çağrılabilir: böylece aşırı seçerek Int? null için

f(5) // calls f(int x) 

ikincisini aramak için, argüman yayınlayabileceğim:

f(5 as Int?) // calls f(Integer y) 
+0

Bu, Kotlin 1.0.2 kararlı ('x' bir' Int') ile çalışıyor görünmüyor: http://i.imgur.com/KLVy5Vn.png – Jire

+1

@Jire, ah, gerçekten. Aynı projede sadece Java kaynakları ile test etmiştim ve bu dava için çalışmıştı. Sorun şu ki, "İlerleme (Tamsayı)" için Kotlin imzası, bir sebepten ötürü "İnt (Int)" (itme) (Int!) 'Dür. – hotkey

+1

@Jire, bu derleyicide bir hata olduğu ortaya çıktı. – hotkey

İlgili konular