专业的JAVA编程教程与资源

网站首页 > java教程 正文

使用Kotlin的伴生对象替换Java中的static关键字的功能

temp10 2024-09-04 19:53:37 java教程 15 ℃ 0 评论

一、内容提要

通过Android中的屏幕像素工具来展示下使用Kotlin中的伴生对象(companion object)来替换Java中的Static关键字。在Java中我们想通过类名直接调用方法一般有两种方式一种是单例类名.getInstance().方法名。一种是通过static定义类的静态方法,通过类名.方法名来调用。如果在Kotlin中我们也想这样调用怎么办呢?其实和Java中差不多,只是用到的关键字和表现形式不一样,下面我们来看看具体怎样操作。


使用Kotlin的伴生对象替换Java中的static关键字的功能


二、实战代码部分

/**
 * 尺寸工具类
 * create by yangwei
 * on 2020/7/15 11:25
 */
class PxUtils {
  //这两个关键字就是用来定义java中的半生对象,可以替换static关键字,根据它的名字大家应该不难
  //猜测出他们的含义,“半生”,即伴随对象生伴随对象死
    companion object {
        /**
         * 获取屏幕宽度
         * @param context 上下文
         * @return 屏幕宽度
         */
        fun getScreenWidth(context: Context): Int {
            return context.resources.displayMetrics.widthPixels;
        }

        /**
         * 获取屏幕高度
         * @param context 上下文
         * @return 屏幕高度
         */
        fun getScreenHeight(context: Context): Int {
            return context.resources.displayMetrics.heightPixels
        }

        /**
         * 获取设备密度
         * @param context 上下文
         * @return 设备密度
         */
        fun getDensity(context: Context): Float {
            return context.resources.displayMetrics.density
        }

        /**
         * dp转px
         * @param dpValue 密度
         * @return 像素
         */
        fun dp2px(dpValue: Float): Int {
            val scale = getDensity(BaseApplication.i())
            return (dpValue * scale + 0.5).toInt()
        }

        /**
         * px转dp
         * @param pxValue 像素值
         * @return 转换后的dp值
         */
        fun px2dp(pxValue: Float): Int {
            val scale = getDensity(BaseApplication.i());
            return (pxValue / scale + 0.5f).toInt()
        }

        /**
         * 将sp转换为px
         * @param spValue sp值
         * @return 转换后的px值
         */
        fun sp2px(spValue: Float): Int {
            val scale = getDensity(BaseApplication.i())
            return (spValue * scale + 0.5f).toInt()
        }
    }
}

调用方式

PxUtils.dp2px()//和Java一样的调用方式



三、解释说明

下面说下另外一种方式通过单例来通过类名.方法名来调用一个类的方法。通过object 类名{}来定义一个单例类。没错,用object关键字+类名+大括号就是一个完整的Kotlin中的单例,系统帮我们做了必要的封装,用java反编译后其代码和java单例代码一样。

在Kotlin中调用单例的方法不用像java中还需要调用一个getInstance()方法。其直接可以通过类名.方法名就可以调用了。但是有一点需要注意,如果是java调用Kotlin中的单例,则需要通过类名.INSTANCE.方法名来调用。

四、结束



结束了,喜欢记得关注,会持续分享一些移动开发的实战部分代码。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表