Object表达式&声明
Object 表达式
主要是匿名实现接口,,如果构造函数需要传参也可以传入
下面实现一个存在的接口
fun BaseMain() {
var des = object : IDecription {
override fun description() {
println("This is an anonymous implement.Please wait you teacher to come.")
}
}
des.description()
}
interface IDecription {
fun description()
}
- 直接创建
临时使用object,造一个
var ob = object {
var name = "NieBin"
var age = 29
}
ob.age = 20
println("ob=$ob and name is ${ob.name} ,age is ${ob.age}")
- 只能用在private 和location 声明,不能用在public ,使用后也不能访问
fun BaseMain() {
privObj().x//可以调用
pubObj().x//直接编辑错误
}
fun pubObj() = object {
var x = 10
}
private fun privObj() = object {
var x = 10
}
- 调用外部参数
匿名内部类,调用外部参数,不会像java一样需要final 类型,kotlin中只要一般变量就可以调用,并且只有调用的时候才去读取值
fun BaseMain() {
var x = 0
var y = 0
var function = object : INoFinal {
override fun callFun() {
println("This is callFun funtion, I print the follow content: x = $x and y = $y")
}
}
println("first......")
function.callFun()
println("change the x,y")
x = 3;y = 9
function.callFun()
}
interface INoFinal {
fun callFun()
}
/**打印
first......
This is callFun funtion, I print the follow content: x = 0 and y = 0
change the x,y
This is callFun funtion, I print the follow content: x = 3 and y = 9
*/
Object声明
- 单例模式
定义后,不需要实例化,直接调用名称,就像java中的类调用静态方法一样,灰常方便的不是吗!
这里的Log就是单例的,并且是线程安全的
并且可以继承于某个类,这里略,自己写写
fun BaseMain() {
Log.log("GOOGOGO", "This is the firt log I had say.")
}
object Log {
fun log(tag: String, content: String) {
println("$tag: $content")
}
}
Companion Object 友员对象
在kotlin中没有,静态方法的概念,如果想通过类直接调用方法,就需要实现Companion Object-
一个类中只能允许一个companion object 哟
- 带名字
命名规则和一般的类一样
调用时,可以直接调用,也可以通过Object name来调用 ,实现如下 都是合法的调用
fun BaseMain() {
Robot.x
Robot.StaticFunction.x
Robot.running()
Robot.StaticFunction.running()
}
class Robot {
companion object StaticFunction {
var x = 1
fun running() {
println("This robot is running,please run with her and ask some special question!")
}
}
}
- 省略名字
声明时,不带名字,只有关键字,请往下看
可以发现,和带名字的调用方式是一样的,只是将object名字默认设置为Companion而已
fun BaseMain() {
Animal.yellLoad()
Animal.Companion.yellLoad()
}
class Animal {
companion object {
fun yellLoad() {
println("There is some thing horrible, the animal nearby are all yelling aloadly with each other.")
}
}
}
注意:虽然调用是和静态的一样,实际上却是对象的调用
完