Kotlin 命名约定

Luc*_*cem 6 naming-conventions kotlin

我有点审美程序员,最近我冒险使用 Kotlin。我将我的静态变量命名为 asval PREF_NAME = "onb"并在 android studio 中收到警报 在此处输入图片说明

我研究了这个,但它与 Kotlin 官方文档相矛盾

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

const val MAX_COUNT = 8

val USER_NAME_FIELD = "UserName"

有什么我想念的吗?

vod*_*dan 7

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

class A {
    val justAProperty = ""
}

val TOP_LEVEL_VAL_PROPERTY = ""

object B {
    val OBJECT_VAL_PROPERTY = ""
}
Run Code Online (Sandbox Code Playgroud)

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


zsm*_*b13 7

我认为您正在做的是将您val的课程放在常规课程中,如下所示:

class X {
    val PREF_NAME = "onb"
}
Run Code Online (Sandbox Code Playgroud)

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


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

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

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

val PREF_NAME = "onb"
Run Code Online (Sandbox Code Playgroud)

或者在一个object

object X {
    val PREF_NAME = "onb"
}
Run Code Online (Sandbox Code Playgroud)

或在伴随对象内:

class X {
    companion object {
        val PREF_NAME = "onb"
    }
}
Run Code Online (Sandbox Code Playgroud)

这些也是您可以使用const修饰符标记属性的地方,如果它在编译时保持不变。