建议如何在Kotlin中创建常量?命名规则是什么?我在文档里没有找到。
companion object {
//1
val MY_CONST = "something"
//2
const val MY_CONST = "something"
//3
val myConst = "something"
}
或者…?
建议如何在Kotlin中创建常量?命名规则是什么?我在文档里没有找到。
companion object {
//1
val MY_CONST = "something"
//2
const val MY_CONST = "something"
//3
val myConst = "something"
}
或者…?
当前回答
在Kotlin中声明常量不需要类、对象或伴生对象。您可以声明一个包含所有常量的文件(例如constants。或者你也可以把它们放在任何现有的Kotlin文件中),并直接在文件中声明常量。编译时已知的常量必须用const标记。
所以,在这种情况下,它应该是:
const val MY_CONST = "something"
然后你可以导入常量使用:
import package_name.MY_CONST
你可以参考这个链接
其他回答
class Myclass {
companion object {
const val MYCONSTANT = 479
}
}
你有两个选择,你可以使用const关键字或使用@JvmField,这使它成为java的静态最终常量。
class Myclass {
companion object {
@JvmField val MYCONSTANT = 479
}
}
如果您使用@JvmField注释,那么在它编译之后,常量就会以java中调用它的方式为您放入。 就像你在java中调用它一样,当你在代码中调用同伴常量时,编译器会为你替换它。
但是,如果使用const关键字,则常量的值将内联。内联是指在编译后使用实际值。
所以总结一下编译器将为你做什么:
//so for @JvmField:
Foo var1 = Constants.FOO;
//and for const:
Foo var1 = 479
在Kotlin中声明常量不需要类、对象或伴生对象。您可以声明一个包含所有常量的文件(例如constants。或者你也可以把它们放在任何现有的Kotlin文件中),并直接在文件中声明常量。编译时已知的常量必须用const标记。
所以,在这种情况下,它应该是:
const val MY_CONST = "something"
然后你可以导入常量使用:
import package_name.MY_CONST
你可以参考这个链接
我认为这将是把一个包的所有常量放在同一个文件中的最好方法,正如在其他答案中提到的,这避免了创建伴侣对象,这使得这个性能和非常类似于Java constants类。
class Constants {
object Analytics {
const val PROJECT_OPEN = "project_open"
const val PROJECT_CLOSE = "project_close"
}
object HTTP {
const val BASE_URL = "x.y.com"
}
object DBConst {
const val TABLE_NAME = "abc"
}
}
这可以从这样的代码中引用,使其非常结构化。
Constants.Analytics.PROJECT_OPEN
Constants.HTTP.BASE_URL
Constants.DBConst.TABLE_NAME
在Kotlin中,当我们声明变量时,有两个选项。'var'或'val'。 遵循变量的命名惯例,我认为我们可以简单地生成“常量”,这意味着我想要一个固定的值分配给一个特定的变量,就像下面的示例代码。
private val tag = "MainActivity"
我认为我们不需要像在Java世界中所做的那样,麻烦地使用大写字母来区分“常量”和变量。
像val一样,用const关键字定义的变量是不可变的。这里的区别在于,const用于编译时已知的变量。
声明一个变量const很像在Java中使用static关键字。
让我们看看如何在Kotlin中声明一个const变量:
const val COMMUNITY_NAME = "wiki"
用Java编写的类似代码是:
final static String COMMUNITY_NAME = "wiki";
加上上面的答案-
@JvmField可以用来指示Kotlin编译器不生成 getter /setter,并将其公开为字段。
@JvmField
val COMMUNITY_NAME = "Wiki"
静态字段
在命名对象或伴生对象中声明的Kotlin属性 将有静态支持字段,无论是在该命名对象或 包含伴生对象的类。
通常这些字段是私有的,但它们可以通过以下方式之一公开:
@JvmField注释; lateinit修饰语; const修饰符。
更多详情请访问:https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#instance-fields