在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. 如果你只做自己能力范围内的事,那么你永远没法进步
  2. c# point偏移_GMap.NET开发技巧(四)-GPS百度地图坐标偏移及地图加偏和逆向纠偏解决方法和代码...
  3. opengl加载显示3D模型q3s类型文件
  4. mysql collectset_005.hive列转行 (collect_set() 去重)
  5. troubleshoot之:用control+break解决线程死锁问题
  6. 见证开户_见证中的发现
  7. 征稿通知!ICCV 2021 第一届面向意图表达的手绘草图研讨会
  8. 2016年1月20日总结
  9. 清华大学python视频_涨见识了,清华大学全套Python642集视频教程泄露,拿走玩去...
  10. java实现聊天室(GUI界面+私聊+群聊)
  11. WebGL之3D地球
  12. Unity3D——打飞碟游戏(2)
  13. .net core word转pdf_Enolsoft PDF to Word with OCR for Mac(PDF转Word软件)
  14. HJ107 求解立方根(java详解,二分法详解)
  15. 最新版Adobe2023:After Effects 2023(Ae2023) win/mac版中文特别版
  16. LoRa模块无线通信技术在距离测量和定位上的应用——东胜物联
  17. Windows Server 2012 IPAM的管理
  18. goland debug Got a connection, launched process /private/var/folders/l9/
  19. h5 ios中软键盘弹起后 fixed定位失效
  20. html如何自动适应分辨率,css如何适应不同分辨率?

热门文章

  1. 查询自己的IP地址(内网和外网)
  2. 抢夺英特尔Mac订单 AMD拦路虎暂不成气候
  3. 2021《黑寡妇》终于上映,但,在中国却只能是盗版的命!
  4. WinForm控件之【MaskedTextBox】
  5. autocad2008许可证错误无法激活的解决办法
  6. 异步电机有速度传感器矢量控制,matlab,仿真模型。 转速外环电流内环
  7. Gitlab 实现仓库完全迁移
  8. node-gyp编译c++编写的node扩展
  9. 趣味题_蚂蚁爬杆_猴子分桃
  10. 用户体验分析: 以 “南通大学教务管理系统微信公众号” 为例