val set : MutableSet<String> = mutableSetOf("李元霸", "李连杰")set += "李俊"set += "李天"set -= "李连杰"set.add("刘军")set.remove("刘军")println(set)
集合转换与快捷函数
val list : MutableList<String> = mutableListOf("Derry", "Derry", "Derry", "Leo", "Lance") // list 可以重复元素println(list)// List 转 Set 去重val set /*: Set<String>*/ = list.toSet()println(set)// List 转 Set 转 List 也能去重val list2 /*: List<String>*/ = list.toSet().toList()println(list2)// 快捷函数去重 distinctprintln(list.distinct()) // 内部做了:先转变成 可变的Set结合 在转换成 List集合println(list.toMutableSet().toList()) // 和上面代码等价
var name = "KK"get() = fieldset(value) {field = value}var value = "ABCDEFG"// 下面的隐式代码,不写也有,就是下面这个样子get() = fieldset(value) {field = value}var info = "abcdefg ok is success"get() = field.capitalize() // 把首字母修改成大写set(value) {field = "**【$value】**"}// 背后隐式代码:new KtBase70().setName("Kevin");KtBase70().name = "Kevin"// 背后隐式代码:System.out.println(new KtBase70().getName());println(KtBase70().name)println(">>>>>>>>>>>>>>>>>>")// 背后隐式代码:System.out.println(new KtBase70().getInfo());println(KtBase70().info)// 背后隐式代码:new KtBase70().setInfo("学习KT");KtBase70().info = "学习KT"
Kotlin语言的 计算属性 与 防范竞态条件
val number : Int = 0/* 背后的代码:private int number = 0;public int getNumber() {return this.number;}*/// 计算属性 下面这样写 get函数覆盖了 field 内容本身,相当于field失效了,无用了,以后用不到了val number2 : Intget() = (1..1000).shuffled().first() // 从1到1000取出随机值 返回给 getNumber2()函数/*背后隐式代码:为什么没有看到 number2 属性定义?答:因为属于 计算属性 的功能,根本在getNumber2函数里面,就没有用到 number2属性,所以 number2属性 失效了,无用了,以后用不到了public int getNumber2() {return (1..1000).shuffled().first()java的随机逻辑 复杂 ;}*/var info: String ? = null // ""// 防范竞态条件 当你调用成员,这个成员,可能为null,可能为空值,就必须采用 防范竞态条件,这个是KT编程的规范化fun getShowInfo() : String {// 这个成员,可能为null,可能为空值,就启用 防范竞态条件// 这种写法,就属于 防范竞态条件,我们可以看到专业的KT开发者,有大量这种代码// also永远都是返回 info本身return info?.let {if (it.isBlank()) {"info你原来是空值,请检查代码..." // 是根据匿名函数最后一行的变化而变化} else {"最终info结果是:$it" // 是根据匿名函数最后一行的变化而变化}} ?: "info你原来是null,请检查代码..."}
主构造函数
class KtBase72(_name: String, _sex: Char, _age: Int, _info: String) // 主构造函数
{var name = _nameget() = field // get不允许私有化private set(value) {field = value}val sex = _sexget() = field// set(value) {} val只读的,不能修改的,不能set函数定义val age: Int = _ageget() = field + 1val info = _infoget() = "【${field}】"fun show() {// println(_name) 临时的输入类型,不能直接用,需要接收下来 成为变量才能用println(name)println(sex)println(age)println(info)}
}
主构造函数里定义属性
// var name: String 就相当于 var name = _name 这不过你看不到而已
// 一步到位,不像我们上一篇是分开写的
class KtBase73 (var name: String, val sex: Char, val age: Int, var info: String)
{fun show() {println(name)println(sex)println(age)println(info)}
}