这里将kotlin
中的object
关键字用法总结下
//仅仅是单例而已
//kotlin中写法直接是 类名,不需要加括号
object ObjectDeep {
fun sayHi(): String = "hi"
val TAG="CDMAN"
}
在使用的使用
fun main() {
/**********第一例测试**********/
ObjectDeep.sayHi().also(::println)
//true
println(ObjectDeep == ObjectDeep)
println(ObjectDeep.TAG)
}
请注意几个细节
ObjectDeep
是没有.
出方法的,ObjectDeep
后面是没有括号的。【这个写法NB,后面讲】饿汉
单例【不懂百度】Java中,我们会写很多工具类,通常工具类的方法都是静态的,但是在kotlin中是没有静态方法的,但是可以通过如下方式实现
class SomeUtil {
private constructor()
companion object {
@JvmStatic
fun sayHello() = "hello"
@JvmStatic
fun plus(): Int = 1
}
}
在kotlin中使用办法如下:
fun main() {
SomeUtil.plus().also { println(it) }
SomeUtil.sayHello().also { println(it) }
}
解读如下
private constructor()
保证了外部无法new@JvmStaic
是方便Java
调用的时候,不用写Companion
,因为假如没有这个注解在Java中调用的时候,需要用如下写法:SomeUtil.Companion.sayHello()
当需要静态的内部类的时候,就可以通过如下写法了
class StaticClass {
fun outer() = "outer hello"
object InnerObject {
fun sayHello() = "hello"
}
}
使用的时候如下
fun main() {
//调用的是静态内部类的方法
StaticClass.InnerObject.sayHello()
//调用的实例方法
StaticClass().outer().also { println(it) }
}
类似Java
中new
一个接口或者抽象类,代码如下
interface ICall {
fun call(): String
}
fun main() {
val obj = object : ICall {
override fun call(): String {
return "call ICall"
}
}
println(obj.call())
}
object
表示了后面的是一个匿名对象
这大概就是几个常用的用法了吧?太晚了,写的不够详细,看官有兴趣,结合其他博文和官方文档,一起领取。