singleton - 对象的类型别名和val之间的区别

标签 singleton kotlin type-alias

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

关于singleton - 对象的类型别名和val之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44347005/

相关文章:

swift - 使用 typealias 时,出现编译器错误 "use of undeclared type"

syntax - 有什么方法可以创建特定 FnMut 的别名吗?

c# - 静态方法和变量中的线程安全

java - 单例中的双重检查锁定

c# - Ninject Singleton 范围内部控制台应用程序

android - 为什么使用 View Binding 会改变布局?

kotlin - 如何在 kotlin 数据类中使用枚举

scala - 当类依赖于隐式时,是否有一种惯用的方法将类转换为对象?

android - 当用户在共享选项中点击我的应用程序按钮时,是否有任何方法可以在 YouTube 上方显示我的应用程序的进度条

swift - 在 Swift 中,如何在类型别名中操作对象?