对于一个类,很明显我们不能使用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) {}