2016-06-04 11 views
8

, FastUtil의 IntArrayList 모두 int (원시) 및 Integer (박스)를 수용하는 push 방법이 있지만, 코 틀린이 모두 동일한 기능 push(Int) 같이 따라서 I 전혀 기능 모호으로서의 기능을 사용할 수 없다 본다.Kotlin : Java 라이브러리에 프리미티브 및 박스형 모두의 과부하가있을 때 어떻게해야합니까? 예를 들어

Java 라이브러리에 프리미티브 및 박스형 모두에 대한 과부하가있는 경우 어떻게해야합니까?

(나는 내가 add(int) 방법을 사용할 수 있다는 것을 알고 PS. 나는 앞으로 이러한 문제가 건너 경우 수행 할 작업에 찾아입니다.)

답변

1

당신이 제공하는 자바 클래스를 작성하려고 되세요 중개인으로서? 즉, Kotlin이 보길 원하는 메소드로 자신의 Java 클래스를 작성한 다음 Kotlin 코드에서 해당 메소드를 호출하십시오.

+1

을 그 실행 가능한 솔루션이지만 더 쉬운 방법이 있다고 의심하지 않습니까? – Jire

9

자바 이러한 방법을 고려

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

가 코 틀린, 그들은

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

것처럼 보이는 두 번째 방법은 그것이 , 널이 될 해당 수 의미 platform type의 파라미터를 갖는다 Integer.

우선 하나는 단순히 전달 코 틀린 Int로 호출 할 수 있습니다 따라서 과부하 선택, Int?을 Null 허용하는

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

두 번째 전화를 걸려면, 당신은 인수를 캐스팅 할 수 있습니다 :

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

이것은 Kotlin 1.0.2 stable ('x'는'Int'입니다)에서 작동하지 않는 것 같습니다 : http://i.imgur.com/KLVy5Vn.png – Jire

+1

@Jire, ah, 참으로. 필자는 같은 프로젝트 내에서 자바 소스 만 테스트했으며,이 경우에 효과가있었습니다. 문제는'push (Integer)'에 대한 Kotlin 서명은'push (Int!)'가 아닌'push (Int)'입니다. – hotkey

+1

@ Jire, 이것은 컴파일러의 버그로 밝혀졌습니다. – hotkey