7

我是一个审美程序员,最近我冒险进入了 Kotlin。我将我的静态变量命名为val PREF_NAME = "onb"并在 android studio 中收到警报 在此处输入图像描述

我对此进行了调查,但它与 Kotlin 官方文档相矛盾

常量的名称(用 const 标记的属性,或者没有自定义 get 函数的顶级或对象 val 属性,这些属性包含深度不可变的数据)应使用大写下划线分隔的名称:

const val MAX_COUNT = 8

val USER_NAME_FIELD = "UserName"

有什么我想念的吗?

4

2 回答 2

8

我认为你正在做的是把你val放在一个普通的班级里,就像这样:

class X {
    val PREF_NAME = "onb"
}

通过这样做,您为类的每个实例提供了一个单独的属性——即使它们都具有相同的值,这与 Java 术语中的单个静态常量并不完全相同。


您引用的文档中列出了预期放置常量以使其只有一个实例的位置,特别是这部分:

用 const 标记的属性,或者没有自定义 get 函数的顶级或对象 val 属性

所以这些属性可以是顶级的(不嵌套在文件中的任何其他内容中):

val PREF_NAME = "onb"

或者在一个object

object X {
    val PREF_NAME = "onb"
}

或在伴随对象内:

class X {
    companion object {
        val PREF_NAME = "onb"
    }
}

这些也是你可以用const修饰符标记属性的地方,如果它在编译时是常量的话。

于 2018-08-11T05:37:21.560 回答
7

我猜你的属性在一个类中,在这种情况下它既不是顶级也不是对象值:

class A {
    val justAProperty = ""
}

val TOP_LEVEL_VAL_PROPERTY = ""

object B {
    val OBJECT_VAL_PROPERTY = ""
}

坦率地说,它们之间的差异很小。我总是对所有属性使用驼峰式大小写,但对于const val我使用大写来标记它们的不同性质。

于 2018-08-11T05:33:29.597 回答