一、Kotlin语言定义类与field关键字学习
class KtBase70 {
var name = "Derry"
/* 背后做的事情
@NotNull
private String name = "Derry"
@NotNull
public void setName(@NotNullString name) {
this.name = name;
}
@NotNull
public String getName() {
return this.name
}
*/
var value= "abcdsae"
//下面的隐式代码,不写也有,就是下面这个样子
get() = field
set(value) {
field = value
}
var info = "hhhhhhhhhh"
get() = field.capitalize() //把首字母修改成大写
set(value) {
field = "**[$value]**"
}
/*背后做的事情:
private String info = "hhhhhhhhhh"
@NotNull
public void setInfo(@NotNullString info) {
this.info= "**[" + info + "]**";
}
@NotNull
public String getInfo() {
return StringKt.capitalize(this,info)
}
*/
}
fun main() {
//背后隐式代码:new KtBase70().setName("Ke");
KtBase70().name = "ke"
println(KtBase70().info)
ktBase70().info = "xxKT"
}
二、Kotlin语言的计算属性 和 防范竟态条件
class KtBase71 {
val number : Int = 0
/*
private int number = 0
public int getNumber() {
return this.number;
}
*/
//计算属性 下面这样写 get函数覆盖了 field内容本身,相当于field失效
val number2 : Int
get() = (1..1000).shuffled().first() //从1到1000取出随机值,返回给getNumber2函数
/*背后隐式代码:
//为什么没有看到number2属性定义
//因为属于计算属性的功能,根本在getNumber2函数里面,就没有用到number2属性,所以number2属性失效
public int getNumber2() {
return (1..1000).shuffled().first()java的逻辑;
}
*/
var info : String ?= ""
//防范竟态条件 当你调用成员,可以为null,可能为空值,就必须采用防范竟态条件,这个是KT编程的规范
fun getShowInfo() : String {
//这种写法,就舒服防范竟态条件,我们可以看到专业的KT开发者,有大量这种代码
//also永远返回info本身
//let返回最后一行
return info?.let{
if (it.isBlank()) {
"为空,请检查"
} else {
"最终info结果是:$it"
}
} ?: "null,请检查"
}
}
fun main() {
//println(new ktBase71().getNumber())
println(ktBase71.number)
//这个会报错,因为这个类没有set函数
//ktBase71.number = 9
//getNumber2()
println(KtBase71().number2)
//getShowInfo()
println(KtBase71().getShowInfo())
}