在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{@JvmStaticfun doAction2(){println("do action2")}}}

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

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

Kotlin - 静态方法相关推荐

  1. Kotlin静态方法定义和调用

    在习惯java的开发之后,使用kotlin进行编码,总有那么些不自然. 静态类的定义: 全局静态(实际上是单例模型) 直接将类声明为object,那么所有的函数也就静态的了,这种一般适用于各种util ...

  2. React Native Android 从学车到补胎和成功发车经历,kotlin静态方法

    | ±-- com.facebook.fresco:fbcore:0.11.0 | - com.facebook.fresco:imagepipeline-base:0.11.0 | ±-- com. ...

  3. 用生命周期规范组件化流程

    写在前面 1. 组件划分 架构 宿主壳.调试壳 组件层 基础层 MVC.MVP.MVVM 如何下沉 Utils 规范:使用 Kotlin 静态方法 单例模式 res 规范:命名清晰 string.xm ...

  4. Kotlin中的Java静态方法等效于什么?

    本文翻译自:What is the equivalent of Java static methods in Kotlin? There is no static keyword in Kotlin. ...

  5. kotlin调用类中的方法_一种轻松的方法来测试Kotlin中令人沮丧的静态方法调用

    kotlin调用类中的方法 by Oleksii Fedorov 通过Oleksii Fedorov 一种轻松的方法来测试Kotlin中令人沮丧的静态方法调用 (A stress-free way t ...

  6. Kotlin定义静态变量、静态方法

    Kotlin定义静态变量.静态方法 kotlin定义静态变量.方法可以采用伴生对象companion object的方式. 经典例子,实例化Fragment. java写法: public class ...

  7. Kotlin 静态类,静态方法

    整个静态类: object StaticUtil{fun method()... } 类中的部分静态方法 class StaticUtils {companion object {// 包裹范围内 属 ...

  8. kotlin实现静态类和静态方法

    kotlin中,声明静态类的方法很简单: /*** 类名前的class替换成object,为静态类,此类下的所有对象和函数,都是静态,* 所有方法都为静态方法,如工具类.常量池.*/ object L ...

  9. Kotlin:静态方法

    静态方法在其他高级语言(如C++,Java)中也叫类方法.静态方法在调用时无需创建实例,通过类名.方法名的方式调用. 在java中调用静态方法的只需在声明前面加关键字static即可.而kotlin中 ...

最新文章

  1. github 删除工程的操作
  2. 软件体系结构的风格(转载)
  3. 电视机当计算机屏幕,电视机可以当电脑显示器吗
  4. 分类与数值预测是预测问题的两种主要类型
  5. 用python画大白_[Python][可视化]matplotlib基础入门
  6. GARFIELD@01-19-2005
  7. ArcEngine开发之自定义工具
  8. 10分钟学会vuex
  9. linux rewind函数,C语言rewind()函数:将文件指针重新指向文件开头
  10. 25年面试官首次揭秘——世界500强面试题之微软面试题
  11. 计算机操作系统主要特征,计算机操作系统的最基本特征是什么
  12. SCAU高级语言程序设计--实验4 选择结构(3)
  13. java计算机毕业设计教务排课系统(附源码、数据库)
  14. html 数据交互动画,H5交互动画创作平台推荐:爆米兔和木疙瘩
  15. VM VirtualBox Centos6.5安装Oracle 11g r2 RAC
  16. 幼儿园调查过程怎么写_(完整版)幼儿园调查报告
  17. conda添加清华镜像源
  18. osEye.Net:离别是为了将来的重逢
  19. 【AV1 编码器研究一】aomenc.exe命令行参数简析
  20. Mybatis缓存机制(一级缓存、二级缓存、三级缓存)

热门文章

  1. linux psycopg2,[Linux][Python][psycopg2]脱机安装问题,LinuxPythonpsycopg2,离线
  2. catkin_make, cmake, catkin build区别
  3. 游戏制作之路(52)更换摄像机的天空盒
  4. sql server 2005 外围应用配置器错误 - 计算机 localhost 在网络上不存在,或无法远程配置该计算机
  5. 体育课室内计算机教案,体育教案-体育室内课
  6. 软件缺陷智能分析技术(3) - 提升SZZ的准确率
  7. 单片机ch2o程序_基于51单片机的室内甲醛测试系统
  8. 星际译王的词典下载地址分享
  9. 头条权重在线查询,头条号增加权重的4个妙招
  10. 【ParaView教程】1.2 可视化基础