Kotlin初学(二:拓展函数之Date拓展)

使用Java开发时,往往需要满足不同的需求而不断的写些工具类(如字符串工具类StringUtil、日期工具类DateUtil等)来补充,工具类越来越多,管理也就越来越麻烦
因此,Kotlin推出了拓展函数的概念,允许开发者给系统类补写新的方法
在开发中,最常见的就是时间格式化工具了,在以往的Java开发中,往往需要些一个工具类来调用

public class DateUtil {

    public static String getNowDateTime(){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return simpleDateFormat.format(new Date());
    }

    public static String getNowDate(){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        return simpleDateFormat.format(new Date());
    }
}

而在Kotlin中,无需书写专门的工具类,只需要写需要的拓展类即可,如Date的拓展类

/**
     * 获取当前的年月日,时分秒
     */
    fun Date.getNowDateTime(): String {
        val sdf = SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss")
        return sdf.format(this)
    }

直接在系统的Date基础上.函数名,如上面的Date.getNowDateTime()
调用拓展的函数则只需要在需要的地方使用

Date().getNowDateTime()

即可
当然此拓展函数也有局限性,从调用上看,可能会产生不舒服,一个方法的调用要使用"Date().getNowDateTime()",一个两个无所谓,多了看着就有点难受了
其次次拓展方法需要依赖某个已存在的类来拓展,没了具体的类来拓展也就没啥意义了
所以Java中的工具类在某种程度上更灵活、适应性更广。那么,Kotlin有没有专门的工具类写法呢?
相比Java的工具类写法来说,Kotlin的写法要简化的多,Kotlin使用对象关键字object来修饰,称之为"单例对象"

object DateUtil {

    /**
     * 获取当前年月日,时分秒
     */
    val nowDateTime :String get() {
        val sdf = SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss")
        return sdf.format(this)
    }

    /**
     * 获取当前年月日
     */
    val NowDate: String get(){
        val sdf = SimpleDateFormat("yyyy年MM月dd日")
        return sdf.format(this)
    }

    /**
     * 获取当前时分秒
     */
    val NowTime: String get(){
        val sdf = SimpleDateFormat("HH:mm:ss")
        return sdf.format(this)
    }

    /**
     * 获取当前时分秒,精确到毫秒
     */
    val NowTimeDetail: String get(){
        val sdf = SimpleDateFormat("HH:mm:ss.SSS")
        return sdf.format(this)
    }

关键字object用来声明单例对象,内部方法采用 val 函数名 : 返回类型 get(){具体业务}
外部访问单例对象时,系统会自动调用该函数名的get()方法

DateUtil.nowDateTime

比上面的看着也舒服多了

今天的笔记就写到这里了
上期Kotlin笔记:(Kotlin初学(一:OnClickListener)
)

你可能感兴趣的:(Android开发,Kotlin,Android)