2016-06-04 3 views
7

another question에서 영감을 얻었습니다. 그것이 왜 특별한 이유가 코 틀린에서Java 메소드의 정수 매개 변수가 플랫폼 유형이 아닌 Int에 매핑되는 이유는 무엇입니까?

public void push(Integer o) 

push(o: Int) 

로 볼 수 있습니다 :

fastutil 라이브러리에서 다음 Java 서명을하는 방법이있다 IntArrayList 클래스있다 Int 플랫폼 유형이 아닌 Int!?

나는 코 틀린 소스와 프로젝트 내에서 자바 소스에 정의 된 동일한 서명을하는 방법은 코 틀린에서 볼 매개 변수 유형으로 Int!있다 (심지어 다른 모듈에 정의, 심지어 항아리에서 수입 적어도 있기 때문에 push(o: Int!)을 것으로 예상 그 모듈의!).

또한, 동작 설명은 법적 Int 파라미터를 갖는 (동일한 클래스) push(int o)과 충돌을 야기 push(Integer o) - 그들은 모두 push(o: Int)으로 보인다. IntegerInt!이있는 경우에는 충돌이 없습니다 (코드에서이 쌍의 메서드를 정의하려고 시도 했음 - 예상대로 작동 함, Int!).


코 틀린 버전은 1.0.2입니다. fastutil에 대한

Gradle을 의존성 :

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

답변

9

나는 그것이 코 틀린 컴파일러 버그라고 생각한다.

interface Stack<T> { 
    void push(T t); 
} 

interface IntStack extends Stack<Integer> { 
    void push(int i); 
} 

코 틀린 인터페이스 IntStack 오직 한 방법 push(Int)를보고, 또는보다 구체적으로, 코 틀린 잘못 push(int i) 메소드 push(T t) 재정의하는 것을 예로 : 여기서 문제 IntArrayList 의해 구현되는 인터페이스 IntStack이다.

+5

관련 문제 : https://youtrack.jetbrains.com/issue/KT-11440 – erokhins