Kotlin类不支持静态方法和成员,但Kotlin支持全局函数和变量,因此我们可以直接使用全局函数和变量来代替类中静态方法和静态成员变量。不过还有一个问题没解决,如果要使用类中的这些全局函数和变量,该如何处理呢?
→这就要用到Kotlin推出的一个有趣的语法糖:Objects。那么Objects能取代静态类成员吗?
→某种程度上,Objects可以解决由于没有static而造成的麻烦
下面我们简单说说静态类和静态方法,和往常一样,主要是想总结一下在学习的过程中一些需要注意的地方。
1、静态类:
所有方法都为静态方法的情况,例如经常需要用到的各种工具类,
→ class 类名 改为 object 类名 即可
package per.lijuan.dome.util
import java.text.SimpleDateFormat
import java.util.*
/**
* 时间工具类
* Created by juan on 2018/5/27.
*/
object DateUtil {
val TAG : String = "DateUtil"
/**
* 获取当前系统时间
*/
fun getTime(): String {
val date = Date(System.currentTimeMillis())
val df = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
return df.format(date)
}
/**
* 获取当前系统日期
*/
fun getDate(): String {
val date = Date(System.currentTimeMillis())
val df = SimpleDateFormat("yyyy/MM/dd/")
return df.format(date)
}
}
要引用该对象,我们直接使用其名称即可:
DateUtil.getTime()
DateUtil.TAG
2、静态方法
→这里要引入Kotlin中的一个语法糖:陪伴对象(Companion Objects)
在上面说过,Kotlin中并没有静态类和成员的概念,但并不等于不能实现类似于静态类成员的的功能,陪伴对象(Companion Objects)就是Kotlin用来解决这个问题的语法糖。如果在Kotlin类中定义对象,那么就称这个对象为该类的陪伴对象,陪伴对象要使用关键字Companion声明。
下面我们通过“陪伴对象”的方式在Kotlin里实现静态方法,具体操作为:
在类的内部用companion object { }包裹所需的静态方法
package per.lijuan.dome
import android.content.Context
import android.content.Intent
class Constants {
companion object {
const val accessKeyId = "LTAIBhb65TXLFXsY"
fun show(context: Context, id: Int, name: String) {
val intent = Intent(context, TestActivity::class.java)
intent.putExtra("id", id)
intent.putExtra("name",name)
context.startActivity(inte中 }
}
陪伴对象中定义的成员是可以直接通过类名访问的
Constants.accessKeyId
Constants.show(this,0,"juan")
注意:虽然陪伴对象的成员看起来很像其他语言中的类的静态成员(static member),但在运行期间,这些成员仍然是真实对象的实例的成员,它们与静态成员是不同的。不过使用@JvmStatic 进行注释,编译器会将其编译成Byte Code真正的静态方法。
本篇文章就到这里了,有不足的还望指导,感谢各位^_^