对于一个类,很明显我们不能使用val来引用一个类型。

例如,

class LongName {
    ...
}

typealias A = LongName // OK
val B = LongName // compile error
val C = LongName() // compiles, but it refers to an instance, not the class itself

但是,对于(单例)对象,两者均会编译。此外,两者都可以用作其成员。
object LongName {
    val a = "123"
}

typealias A = LongName
val B = LongName

...

// In a function,
println(A.a) // compiles
println(B.a) // compiles

它们之间有什么区别?

最佳答案

在这种情况下,您可以通过名称将object的单个实例称为LongName(这就是为什么可以将其分配给val的原因):

println(LongName.a)

val longName = LongName
println(longName.a)

您还可以将其类型称为LongName(这就是为什么可以为其创建typealias的原因):
fun doStuff(longName: LongName) {}

typealias LN = LongName
fun doStuff(longName: LN) {}

07-24 19:50