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

时间:2017-08-04 17:54:45

标签: generics kotlin type-alias

我正在学习Kotlin。

但是我遇到了以下示例的问题。

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

position: relative

1 个答案:

答案 0 :(得分:2)

这是因为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)

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

typealias L<T> = ArrayList<T> 

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