建议如何在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"
}
或者…?
当前回答
我认为这将是把一个包的所有常量放在同一个文件中的最好方法,正如在其他答案中提到的,这避免了创建伴侣对象,这使得这个性能和非常类似于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
其他回答
如果你把const val valName = valValue放在类名之前,这样就会创建一个
public static final YourClass。Kt会有公共的静态最终值。
科特林:
const val MY_CONST0 = 0
const val MY_CONST1 = 1
data class MyClass(var some: String)
Java反编译:
public final class MyClassKt {
public static final int MY_CONST0 = 0;
public static final int MY_CONST1 = 1;
}
// rest of MyClass.java
Kotlin静态和常量值&方法声明
object MyConstant {
@JvmField // for access in java code
val PI: Double = 3.14
@JvmStatic // JvmStatic annotation for access in java code
fun sumValue(v1: Int, v2: Int): Int {
return v1 + v2
}
}
在任何地方访问值
val value = MyConstant.PI
val value = MyConstant.sumValue(10,5)
当地常量:
const val NAME = "name"
全局常量:
object MyConstants{
val NAME = "name"
val ID = "_id"
var EMAIL = "email"
}
访问MyConstants。的名字
我认为这将是把一个包的所有常量放在同一个文件中的最好方法,正如在其他答案中提到的,这避免了创建伴侣对象,这使得这个性能和非常类似于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
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