0
点赞
收藏
分享

微信扫一扫

【7】kotlin 类成员变量 set get方法


什么是类成员

属性:或者说成员变量类范围内的变量

方法:或者说成员函数,类范围内的函数

 

函数和方法的区别

 

函数强调功能本身,不考虑从属

方法的称呼通常是从类的角度出发

叫法不同而已,不用纠结

定义方法

写法与普通函数完全一致,就是写在类里面

class Hello{
fun sayHello(name: String) = print("Hello,$name")
}

定义属性

构造方法中 val/var修饰的都是属性

类内部也可以定义属性

//aField 是属性,, notAField就不是了 是构造参数
class Hello2(val aField: Int, notAField: Int) {
//这个也是属性
var anotherField: Float = 3f
}

属性访问控制

属性可以定义getter/setter

属性初始化

  • 属性的初始化尽量再构造方法中完成
  • 无法再构造方法中完成,尝试降级为局部变量
  • 无法降级 var 可以用lateinit 延迟  val 用lazy
  • 可空类型谨慎用null 直接初始化 最好是不用哦

相关代码

java 中的get set

package com.yzdzy.kotlin.member;

public class JavaMember {
private int b = 0;

public int getB() {
System.out.println("Java get B");
return b;
}

public void setB(int b) {
System.out.println("Java set B");
this.b = b;
}
}

kotlin 中的相关代码

package com.yzdzy.kotlin.member

class X
//类名不强制一样。
class KotilinMember {
var b = 0;get()
{
print(" Kotilin get B")
return field
}
set(value)
{
print(" Kotilin set B")
field = value
}

val a :Int =1

// get set 已经被默认实现 默认是
var c = 0; public set get
//可以改为private
var d = 0; private set get
//权限控制和java一样
// var f:String 直接这么写会报错
//lateinit 关键字 延迟处理
lateinit var f: String
// val e:X 直接这么写会报错 val 代表final
val e: X by lazy {
print("init X 在调用的时候才会被执行")
X()
}
var cc: String? = null


}

class Hello {
fun sayHello(name: String) = print("Hello,$name")
}
//aField 是属性,, notAField就不是了 是构造参数
class Hello2(val aField: Int, notAField: Int) {
//这个也是属性
var anotherField: Float = 3f
}

fun main() {
println("start")
var a = KotilinMember()
println("init a ")
println(a.b)
println(a.e)
println(a.c)
//不初始化会报错 lateinit property f has not been initialized
// print(a.f)
//两个 !!号 保证不为空。。一个?不确定是否为空
print(a.cc?.length)
print(a.cc!!.length)

//函数强调功能本山。不考虑属性
// 方法的称呼通常是从类的角度出发


}

 

举报

相关推荐

0 条评论