使用泛型的类型化类型的构造函数

我正在学习Kotlin。

但是我在下面的例子中遇到了麻烦。

当我输入一个我自己创建的类时,我可以使用正常的构造函数,但是我不能用Kotlin列表类型做同样的事情。 我在这里错过了什么?

class Example<T> {} typealias Ex<T> = Example<T> // typealias for example class typealias L<T> = List<T> // typealias for Kotlin list class fun main(args: Array<String>) { Ex<Int>() // OK! compiles L<Int>(0,{ _ -> 1}) // unresolved reference } 

这是因为List<T>是一个接口,这意味着没有构造函数。 而typealias关键字用于现有的类型。 实际上, List(size,init)被定义为stdlib的顶层扩展函数,如下所示:

 // v--- List(size){...} is a function rather than a type inline fun <T> List(size:Int, init: (index: Int)->T):List<T>=MutableList(size,init) 

如果您将别名L更改为具体ArrayList ,则您也可以使用其构造函数创建它,例如:

 typealias L<T> = ArrayList<T> fun main(args: Array<String>) { // v--- create `L<Int>` by its constructor L<Int>(1) }