使用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)
)