Kotlin: Was kann ich tun, wenn eine Java-Bibliothek sowohl primitive als auch boxed-Typen überladen hat?

8

Zum Beispiel hat FastUtils IntArrayList eine push -Methode, die sowohl int (primitiv) als auch Integer (eingerahmt) akzeptiert, aber Kotlin sieht diese beiden als die gleiche Funktion push(Int) , daher kann ich nicht verwenden Die Funktion als Funktion ist mehrdeutig.

Was soll ich tun, wenn eine Java-Bibliothek sowohl für den primitiven als auch für den Boxed-Typ überladen ist?

(ps. Ich bin mir bewusst, dass ich die add(int) -Methode verwenden kann. Ich bin auf der Suche nach was zu tun ist, wenn ich in der Zukunft auf ein solches Problem stoße.)

    
Jire 04.06.2016, 01:52
quelle

2 Antworten

9

Betrachten Sie diese Methoden in Java:

%Vor%

In Kotlin werden sie als

gesehen %Vor%

Die zweite Methode hat einen Parameter von platform type , das heißt, es könnte nullable sein, was Integer entspricht.

Zuerst kann man einfach mit Kotlin Int passed:

aufgerufen werden %Vor%

Um den zweiten Aufruf aufzurufen, können Sie das Argument auf das NULL-Attribut Int? anwenden und so die Überladung auswählen:

%Vor%     
hotkey 04.06.2016 02:47
quelle
1

Haben Sie versucht, eine Java-Klasse zu schreiben, die als Vermittler dient? Das heißt, schreiben Sie Ihre eigene Java-Klasse mit der Methode, die Kotlin sehen soll, und rufen Sie diese Methode dann aus Ihrem Kotlin-Code auf.

    
user2297560 04.06.2016 01:56
quelle

Tags und Links