在Java中,要声明一个常数,你这样做:Kotlin中Java静态最终字段的等价物是什么?
class Hello {
public static final int MAX_LEN = 20;
}
什么是科特林等价?
在Java中,要声明一个常数,你这样做:Kotlin中Java静态最终字段的等价物是什么?
class Hello {
public static final int MAX_LEN = 20;
}
什么是科特林等价?
根据科特林documentation这相当于:
class Hello {
companion object {
const val MAX_LEN = 20
}
}
用法:
fun main(srgs: Array<String>) {
println(Hello.MAX_LEN)
}
而且这是静态的最后一个属性(场吸气剂):
class Hello {
companion object {
@JvmStatic val MAX_LEN = 20
}
}
最后,这是静态最终字段:
class Hello {
companion object {
@JvmField val MAX_LEN = 20
}
}
第一个示例(带有const字段)可用于属性。流行的案例:在单个文件中声明所有web api路径,并从控制器中用这样的代码引用它:“@RequestMapping(path = arrayOf(WebPathConstants.MapApiPath))”(Spring Boot属性) –
嗨,大家好!你知道这个@JvmField是否仍然需要吗?我在android中使用它,它显示了一个警告,说可以使用“const”来代替。我将它改为const,并且使用它的java类没有任何问题。 –
@LeandroOcampo如果你有可变静态字段,const const,编译时间常量,并且肯定可以在某些情况下用来代替'@JvmField val',那么它仍然是必要的。如果值是在运行时计算的,或者它不是原始类型或字符串,则通过它不起作用。参考:http://kotlinlang.org/docs/reference/properties.html#compile-time-constants – IRus
如果你有Hello
的实现,使用companion object
类内部
class Hello {
companion object {
val MAX_LEN = 1 + 1
}
}
如果Hello
是一个纯粹的单对象
object Hello {
val MAX_LEN = 1 + 1
}
如果属性是编译时间常数,加a const
关键字
object Hello {
const val MAX_LEN = 20
}
,如果你想在Java中使用它,添加注释@JvmStatic
object Hello {
@JvmStatic val MAX_LEN = 20
}
对我来说
object Hello {
const val MAX_LEN = 20
}
是很多样板。我简单地把静态的最终字段放在我的班上面
val MIN_LENGTH = 10
class MyService{
}
由于Kotlin中的** val **意味着只读,所以它不够吗? –