Kotin——静态函数和属性

工作中,我们总会积累一些通用的工具类、方法、或者属性。通常我们会将相关联的静态方法抽到一个静态类中,慢慢形成我们自己的工具类;有时候某个业务类中也可能会出现静态方法,或者静态属性。

在 Java 中处理静态类、方法、属性都是很轻松的。而 Kotlin 作为 Google 大力推广的 Android 开发语言,虽然和 Java 做到了最大程度的兼容,同一个项目中可以混合使用,互相调用,没有任何限制;但因语法差异,在静态类、函数、属性这一块的处理也还是有一些差异的。

下面将简单介绍一下最近碰到的几种情况。

一、静态类

我们通常将一类静态方法封装到一个独立的工具类中,这个类就是“静态类”(这么叫不准确,但没想到更好的叫法)。

举个栗子

为了方便管理 log,在 release 版本关闭 log,debug 版本打开 log,我们可以对 Log 类进行封装,添加版本判断。

java实现

Java 代码的实现方式就是这样的:

这段代码很好懂,接着我们看下 Kotlin 的实现方法。

Kotlin实现

Kotlin 中,要实现一个静态类,需要使用关键字去替代 Java 的,就是这样:

此时 LogUtils 是静态的,其中的所有也都是静态的,可以直接通过调用。

二、静态代码块

上面已经介绍了静态类,可以看到在静态类这方面 Kotlin 和 Java 的差异其实并不大。但是实际开发中,有时候非静态的业务类中也会出现静态方法,此时使用关键字就不行了。

举个栗子

比如我们在使用 Fragment 时,不建议直接调用 Fragment 的构造方法构造 Fragment 对象,而是在 Fragment 内部提供一个静态的实例化方法,就像这样:

Java实现

那么这种情况 Kotlin 要怎么实现呢?

Kotlin实现

Kotlin 提供了另一个关键字:,使用和就可以在非静态类中构建静态的代码块,就只这个样子:

此时中的所有方法都是静态的,调用的时候和java一样:

三、静态属性

相信很多人看到上面的静态代码块,就已经知道如何定义静态属性了,但做事还是要有始有终,因此这里还是再说一下。

Java实现

Kotlin实现

很简单,用包起来就可以了。

补充

Java 和 Kotlin 虽然可以没有限制的相互调用。但在静态代码调用方面有一些差异。而且主要表现在的代码,下面以前面的几个栗子为例,简单说下调用方式。

1、Java 调用 Kotlin 静态类的函数:

2、Java 调用 companion 中的函数:

3、Java 调用 companion 中的属性:

Java中调用就是这样的:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180726G0BN0I00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券