相关文章推荐
风流倜傥的单杠  ·  【花雕学AI】超级提问模型大全!150个Ch ...·  7 月前    · 
力能扛鼎的作业本  ·  柠檬鸭组织样本分析-腾讯云开发者社区-腾讯云·  1 年前    · 
骑白马的沙滩裤  ·  创建视图、临时表、with ...·  1 年前    · 
机灵的枇杷  ·  GDB调试器使用总结 - kiven.li ...·  2 年前    · 
Code  ›  Kotlin实战--消除静态工具类:顶层函数和属性开发者社区
静态方法 kotlin 静态函数
https://cloud.tencent.com/developer/article/1910278
潇洒的吐司
2 年前
作者头像
网易Leo
0 篇文章

Kotlin实战--消除静态工具类:顶层函数和属性

原创
前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > Android入门到进阶 > Kotlin实战--消除静态工具类:顶层函数和属性

Kotlin实战--消除静态工具类:顶层函数和属性

原创
作者头像
网易Leo
发布 于 2021-12-03 09:44:00
759 0
发布 于 2021-12-03 09:44:00
举报

1.引入

我们都知道, Java 作为 门面向对象的语言,需要所有的代码都写作类的函数。大多数情况下,这种方式还能行得通。但事实上,几乎所有的大型项目,最终都有很多的代码并不能归属到任何 个类中。有时一个操作对应两个不同的类的对象,而且重要性相差无几。有时存在 个基本的对象,但你不想通过实例函数来添加操作,让它的 API 继续膨胀。结果就是,最终这些类将不包含任何的状态或者实例函数,而是仅仅作为一堆静态函数的 容器 。在 JDK 中, 最适合的例子应该就是 Collections了。看看你自己的代码,是不是也有一些类本身就以Util作为后缀命名。 在kotlin中,根本就不需要去创建这些无意义的类, 相反,可以把这些函数接放到代码文件的顶层,不用从属于任何的类。这些放在文件顶层的函数依然是包内的成员,如果你需要从包外访问它,则需要 import 但不再需要额外包一层。

2.顶层函数

见名知意,原来在Java中,类处于顶层,类包含属性和方法,在Kotlin中,函数站在了类的位置,我们可以直接把函数放在代码文件的顶层,让它不从属于任何类。就像下面这样,我们在一个Test.kt文件中写入如下的Kotlin代码。

package com.smartcentury.agriculturalmarket.utils
fun getKotlin():String{
    return "Kotlin"
}

现在我们看一下如何在其他包中引用它:

import  com.smartcentury.agriculturalmarket.utils.getKotlin
getKotlin()

我们只需要导入包,然后直接调用就可以了。

但是我们可能会有个疑问,如果我们想要在Java中调用这个方法应该如何调用呢?

在Java中调用Kotlin顶层函数。

要想知道如何在Java中调用顶层函数其实很简单,我们只要将Kotlin反编译一下就可以了。下面介绍下如何反编译Kotlin代码 。

第一步:在IDE中打开你需要查看反编译的代码文件,然后打开顶部的"Tools",选择"Kotlin",再选择"Show Kotlin ByteCode"

第二步:点击右侧“Decompile”

我们会得到另外一个文件

通过以上的代码可以总结出两点内容:

  1. 顶层文件会反编译成一个容器类。(类名一般默认就是顶层文件名+"Kt"后缀,注意容器类名可以自定义)
  2. 顶层函数会反编译成一个static静态函数,如代码中的getKotlin函数

现在我们应该知道如何在java代码中如何调用了吧。

TestKt.getKotlin();

可能有时候你觉得Kotlin为你自动生成的这个类名不好,那你可以通过@file:JvmName注解来自定义类名,就像下面这样。

@file:JvmName("MyKotlin")
package com.smartcentury.agriculturalmarket.utils
 * @Author:         Simon
 * @CreateDate:     2019/5/16 16:04
 * @Description:
fun getKotlin():String{
    return "Kotlin"
}

而且要注意,这个注解必须放在文件的开头,包名的前面。

于是我们在Java文件中可以这样调用

MyKotlin.getKotlin();

3.顶层属性

了解了顶层函数,下面再看看顶层属性。顶层属性也就是把属性直接放在文件顶层,不依附于类。我们可以在顶层定义的属性包括var变量和val常量,就像下面这样。

@file:JvmName("MyKotlin")
package com.smartcentury.agriculturalmarket.utils
 * @Author:         Simon
 * @CreateDate:     2019/5/16 16:04
 
推荐文章
风流倜傥的单杠  ·  【花雕学AI】超级提问模型大全!150个ChatGPT神奇示例,让你的聊天更有趣! - 行者花雕 - 博客园
7 月前
力能扛鼎的作业本  ·  柠檬鸭组织样本分析-腾讯云开发者社区-腾讯云
1 年前
骑白马的沙滩裤  ·  创建视图、临时表、with as使用要点总结_为什么创建视图不加as-CSDN博客
1 年前
机灵的枇杷  ·  GDB调试器使用总结 - kiven.li - 博客园
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号