Kotlin静态方法的使用浅析

 更新时间:2022年08月02日 14:34:15   作者:m0_63970488  
静态方法在其他高级语言(如C++,Java)中也叫类方法。静态方法在调用时无需创建实例,通过类名.方法名的方式调用。在java中调用静态方法的只需在声明前面加关键字static即可。而kotlin中却比较复杂,下面我们来了解一下

在Java中定义一个静态方法非常之简单,只需要在方法上声明一个static关键字就可以了:

public class Util {
    public static void doAction(){
        System.out.println("do action");
    }
}

上述代码中doAction()方法是一个静态方法,调用静态的方法并不需要创建实例,因而静态方法非常适合用于编写一些工具类,因为工具类并没有创建实例的必要,基本都是全局通用

和绝大部分不同的是,Kotlin极度弱化了静态方法的这个概念,想要在Kotlin中定义一个静态的方法反而倒不是一件容易的事。

那么Kotlin为什么要这么设计呢,因为Kotlin提供了比静态方法更好用的语法特性,就是单例类。

像工具类这种功能,在Kotlin中直接推荐单例类的方式来实现,比如上述的Util工具类,在Kotlin中可以这么写:

object Util {
    fun doAction(){
        println("do action")
    }
}

单例类的会影响,类中所有的方法全部变成类似静态方法的调用方式,而如果我们只希望让类中的某一个方法变成静态方法调用方式可以采用如下写法:

class Util {
    fun doAction(){
        println("do action")
    }
    companion object{
        fun doAction2(){
            println("do action2")
        }
    }
}

这里在companion object 代码块中定义了一个doAction2()方法。现在Util类中的两个方法就有了本质的区别,doAction()方法一定要先创建Util类的实例才能调用,而doAction2()方法就可以直接使用Util.doAction2()的方式调用。

不过doAction2方法也不并不是静态方法,companion object 这个关键字实际上会在Util类的内部创建一个伴生类,而doAction2方法就是定义在伴生类里面的实例方法。只是Kotlin会保证Util类始终只会存在一个伴生类对象,因此调用Util.doAction2方法实际上就是调用了Util类中的伴生对象的doAction2方法

由此可见,Kotlin确实没有直接定义静态方法的关键字,但是提供了一些语法特性来支持类似于静态方法调用的写法。

如果你确确实实要定义真的静态方法吗,Kotlin仍然提供了两种实现方法,注解和顶层方法。

顶层方法这篇文章不做讲解,请查找其他文章。

来看注解,前面使用的单例类和companion object 都只是语法上模仿了静态方法的调用方式,如果你在java代码中以静态方法的形式去调用的话,你会发现,这些方法并不存在。而如果我们给单例类或者companion object 中的方法加上 @JvmStatic 注解,那么Kotlin在编译器就会将这些方法编译成真正的静态方法

class Util {
    fun doAction(){
        println("do action")
    }
    companion object{
        @JvmStatic
        fun doAction2(){
            println("do action2")
        }
    }
}

注意,@JvmStatic 注解只能加载单例类或companion object中的方法上,如果尝试添加到普通方法上,会直接提示语法错误。

这样不管是在Kotlin和Java中,都可以使用Util.doAction2()的写法来调用了。

到此这篇关于Kotlin静态方法的使用浅析的文章就介绍到这了,更多相关Kotlin静态方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android使用OKHttp包处理HTTP相关操作的基本用法讲解

    Android使用OKHttp包处理HTTP相关操作的基本用法讲解

    这篇文章主要介绍了Android使用OKHttp包处理HTTP相关操作的基本用法讲解,包括操作如何利用OKHttp操作HTTP请求与处理缓存等内容,需要的朋友可以参考下
    2016-07-07
  • Android隐藏标题状态栏的方法

    Android隐藏标题状态栏的方法

    这篇文章主要介绍了Android隐藏标题状态栏的方法的相关资料,需要的朋友可以参考下
    2016-01-01
  • Android无需root实现apk的静默安装

    Android无需root实现apk的静默安装

    这篇文章主要介绍了Android无需root实现apk的静默安装 的相关资料,需要的朋友可以参考下
    2016-01-01
  • Android Cocos Creator游戏开发平台打包优化实现方案

    Android Cocos Creator游戏开发平台打包优化实现方案

    Cocos Creator是一款轻量、高效、免费开源的跨平台游戏引擎,同时也是实时3D内容创作平台,不仅支持2D、3D的游戏开发,同时在HMI、IoT、XR、虚拟人偶等领域,均可提供一套完善的行业解决方案
    2022-11-11
  • Android自定义viewGroup实现点击动画效果

    Android自定义viewGroup实现点击动画效果

    这篇文章主要介绍了Android自定义viewGroup实现点击动画效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android常见控件使用详解

    Android常见控件使用详解

    这篇文章主要为大家详细介绍了Android常见控件的使用方法,包括ProgressBar进度条控件、AlertDialog对话框控件等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Android 中Activity 之间传递参数

    Android 中Activity 之间传递参数

    这篇文章主要介绍了Android 中Activity 之间传递参数的相关资料,希望通过本文能帮助到大家,让大家实现这样的方法,需要的朋友可以参考下
    2017-10-10
  • Android自定义View实现游戏摇杆键盘的方法示例

    Android自定义View实现游戏摇杆键盘的方法示例

    Android进阶过程中有一个绕不开的话题——自定义View。最近在做项目中又遇到了,所以下面这篇文章主要给大家介绍了利用Android自定义View实现游戏摇杆键盘的相关资料,操作方式类似王者荣耀的摇杆操作,文中通过示例代码介绍的非常详细,需要的朋友们下面来一起看看吧。
    2017-07-07
  • Android 点击editview以外位置实现隐藏输入法

    Android 点击editview以外位置实现隐藏输入法

    这篇文章主要介绍了Android 点击editview以外位置实现隐藏输入法的相关资料,需要的朋友可以参考下
    2017-06-06
  • Dagger2新手入门与使用基础教程

    Dagger2新手入门与使用基础教程

    网上随便搜索一下Dragger2,一大堆文章铺天盖地而来,但很多讲的不清楚,下面这篇文章主要给大家介绍了关于Dagger2新手入门与使用基础教程的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2018-04-04

最新评论