2016-11-01 55 views

回答

71

根据科特林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 
    } 
} 
+0

第一个示例(带有const字段)可用于属性。流行的案例:在单个文件中声明所有web api路径,并从控制器中用这样的代码引用它:“@RequestMapping(path = arrayOf(WebPathConstants.MapApiPath))”(Spring Boot属性) –

+0

嗨,大家好!你知道这个@JvmField是否仍然需要吗?我在android中使用它,它显示了一个警告,说可以使用“const”来代替。我将它改为const,并且使用它的java类没有任何问题。 –

+1

@LeandroOcampo如果你有可变静态字段,const const,编译时间常量,并且肯定可以在某些情况下用来代替'@JvmField val',那么它仍然是必要的。如果值是在运行时计算的,或者它不是原始类型或字符串,则通过它不起作用。参考:http://kotlinlang.org/docs/reference/properties.html#compile-time-constants – IRus

6

如果你有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 
} 
0

对我来说

object Hello { 
    const val MAX_LEN = 20 
} 

是很多样板。我简单地把静态的最终字段放在我的班上面

val MIN_LENGTH = 10 

class MyService{ 
} 
相关问题