object
天然的单例
- 语法含义:将类的声明和定义该类的单例对象结合在一起(即通过object就实现了单例模式)
object List {
fun method(){
println("天然的单例")
}
}
-
即将class关键字替换为object关键字,来声明一个类,与此同时也声明它的一个对象。
-
也可以定义在一个类的内部
class List {
object List {
fun method() {
println("天然的单例")
}
}
}
伴生对象
(1)、在Kotlin中是没有static关键字的,也就是意味着没有了静态方法和静态成员。那么在kotlin中如果要想表示这种概念,取而代之的是包级别函数(package-level function)和我们这里提到的伴生对象。
package oop
class Son{
companion object {
val age = 22
}
}
fun Son.Companion.foo() {
println("age = $age")
}
fun main(args:Array<String>) {
Son.foo()
}
伴生对象也可以声明在一个类的内部,使用如下的方式调用
class Object{
companion object myObject {
val tmp = 1
fun method() {
println("i am in companion object")
}
}
}
fun main(args:Array<String>) {
Object.method()
Object.myObject.method()
}
(2)、在类体外调用class.compaion 的方式为伴生对象声明一个函数
package oop
class student{
companion object {
val age = 22
}
}
fun student.Companion.foo() {
println("age = $age")
}
fun main(args:Array<String>) {
student.foo()
}