我有一个与以下代码相关的问题:

fun main() {
    println(Char.SIZE_BYTES)

    val x = 'x'
    println(x.SIZE_BYTES)
}

第一个print语句运行良好,并且正确地打印出2,但是第二个语句会导致编译错误,未知的引用=SIZE_BYTES.Val x是一个字符,为什么我不能在它上面使用SIZE_BYTES呢?

编译错误:未解析引用:SIZE_BYTES

推荐答案

伴随对象的函数和属性并不也是该类的每个实例的函数和属性.当你呼叫Char.SIZE_BYTES时,它实际上是Char.Companion.SIZE_BYTES的简写语法.

Char.Companioncompanion object.它是与Char不同的类别,携带与Char相关的数据,但它本身不是Char,Char也不是Char.Companion.

object是一个没有构造函数的类,它在第一次被引用时会自动实例化.它只有一个实例,您可以直接使用object'的名称来引用该实例.companion object是一个object,允许你省略用它自己的名字来称呼它.您可以只使用其相关类的名称,而不使用.Companion(未命名时的默认名称)或您已命名的任何名称.

Kotlin相关问答推荐

collectAsState 未从存储库接收更改

如何在数据类中删除空格 (String)?

kotlin 父类具有依赖于抽象变量的变量

如何避免键盘打开时jetpack compose 内容上升

Lets plot Kotlin中的多轴比例

如何从 var list 或可变列表中获取列表流

这是什么 Kotlin 类型:(String..String?)

在协程中等待侦听器内的数据

无法在 kotlin android 中以编程方式禁用 EditText

片段内的 Kotlin 按钮 onClickListener 事件

Kotlin suspend fun

未在IntelliJ IDEA上运行临时文件

参数不匹配;SimpleXML

创建Spring和#180的实例;Kotlin中的参数化类型引用

修改扩展函数中的this

Android Kotlin 创建类实现 Parcelable 在 writeToParcel 方法的 override中给出错误

在android的默认浏览器 Select 列表中添加我的浏览器?

如何在Kotlin中将字符串转换为InputStream?

如何在Kotlin中使用Handler和handleMessage?

在 Kotlin 中声明 Byte 会出现编译时错误The integer literal does not conform to the expected type Byte