2015-02-01 10 views
1

유형 A은 유형 B에서 상속받을 수 있지만 유형을 A으로 정의 할 때마다 유형 A? (null 가능)이 무료로 제공됩니다. 그러나 유형 계층 구조에 정확히 어디에 놓여 있습니까? A?A 또는 다른 방법으로 상속됩니까? 라인 (@) 컴파일 된 이유nullable 유형의 유형 계층 구조에있는 위치는 무엇입니까?

open class Foo { 
    fun foo() : Int { 
    return 0; 
    } 
} 

fun test<T : Foo?>(x:T) : Int { 
    return x.foo() // (@) 
} 

fun main(args: Array<String>) { 
    println(test<Foo?>(null)) 
} 

가 이해가 안 : 나는 그런 코드로 의아해이기 때문에

나는이 물어? 또는 다른 말로하면 nullable 유형 계층 구조를 이해할 수 없습니다. 지금까지 내가 T이나 Foo? 또는 그로부터 파생 된 유형으로 생각하기 때문입니다. Nullable 타입에서 Nullable 타입을 파생시킬 수 있습니까?

죄송합니다. 분명히 밝혀지면, 나는 단지 Kotlin을 배우고 있습니다.

(@) null 가능 유형의 경우 x!!.foo()이어야합니다.

답변

2

이것은 컴파일러의 버그입니다. T에 Null 허용 상한선이있을 때 T의 구성원에게 전화 할 수 없어야합니다. X?X의 상위 유형입니다.