Kotlin .. Java concepts clarification(1): Property and Field
在Kotlin中引入了property的概念,但property并非等同于Java中的fields:
- property隐式的包含了fields,但比fields更高级,例如下面的两段代码是等同的:
// Kotlin
var name: String = "Kotlin"
// Java
public String name = "Java"
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
- Kotlin中的property不仅提供了数据存储的字段,也隐式的声明了accessor(包括setter和getter)。accessor 也可由用户自定义,例如如果我们希望得到标题格式的String数据,可以在get之前将其转换成大写格式:
// Kotlin
var name: String = "kotlin
get() = field.capitalize()
print(name)
// prints: Kotlin
- 或者忽略null赋值,只接受非空赋值
// Kotlin
var name: String = "kotlin"
set(String value){
if(value != null)
field = value
}
name = "kotlin"
print(name)
// prints: kotlin
name = ""
print(name)
// prints: kotlin
Property的行为是由它的accessor决定的,并非必要涉及fields。但在自定义accessor的时候,可以通过fields(backing fields)获得该propert的数据。
- 我们可以在interface里面定义property,就像这样:
// Kotlin
interface Example{
val name: String
}
这意味着,在implements该interface的classes里面,必须要定义该val的getter。
Kotlin里面的property给了用户更多选择,是比Java中的fields更高级的概念。
参考:
https://blog.kotlin-academy.com/kotlin-programmer-dictionary-field-vs-property-30ab7ef70531