Kotlin中的Java泛型

Kotlin中泛型与Java中的泛型有点不同。当导入Java中的类型到Kotlin时需要做一些转换:

  • Java通配符被转换为类型映射:Foo<? extends Bar>变成Foo<out Bar!>!;Foo<? super Bar>变成Foo<in Bar!>!
  • Java中的未申明的类型会被转换成星号映射:List变成List<*>!,比如List<out Any?>!。

和Java类似,Kotlin的泛型不会在运行时保留,比如,对象不会携带关于真实类型参数的信息给它们的构造器,比如ArrayList<Integer>()不能与ArrayList<Character>()进行区分。这导致无法使用is-check来进行判断。Kotlin只允许使用is-check来检查星号映射泛型类型:

if (a is List<Int>) // Error: cannot check if it is really a List of Ints
if (a is List<*>) // OK: no guarantees about the contents of the list

results matching ""

    No results matching ""