Warum ist der Integer-Parameter der Java-Methode auf Int und nicht auf den Plattformtyp abgebildet?

Inspiriert voneine andere Frag.

Imfastutil Bibliothek gibt esIntArrayList Klasse, die eine Methode mit der folgenden Java-Signatur hat:

public void push(Integer o)

Von Kotlin wird es als @ geseh

push(o: Int)

Gibt es einen bestimmten Grund, warum es @ iInt und nicht PlattformtypInt!?

Ich habe erwartet, dass espush(o: Int!) Zumindest, weil eine Methode mit derselben Signatur, die in der Java-Quelle innerhalb des Projekts mit Kotlin-Quellen definiert ist,Int! als Parametertyp von Kotlin aus gesehen (sogar in einem anderen Modul definiert und sogar aus dem jar dieses Moduls importiert!).

Auch das beschriebene Verhalten verursachtpush(Integer o) in Konflikt mitpush(int o) (in derselben Klasse) mitInt parameter legal - beide werden als @ angesehpush(o: Int). Wenn es @ gäInt! zumInteger, es würde keinen Konflikt geben (ich habe auch versucht, dieses Methodenpaar in meinem Code zu definieren - funktioniert immer noch wie erwartet, es gibtInt!).

Kotlin Version ist1.0.2.

Gradle Abhängigkeit fürfastutil:

compile group: 'it.unimi.dsi', name: 'fastutil', version: '7.0.12'

Antworten auf die Frage(2)

Ihre Antwort auf die Frage