kotlin快速入门之标准函数与静态方法

目录
  • 标准函数
    • with
    • run
    • apply
  • 静态方法
    • 单例类实现静态方法
    • 伴生类实现静态方法
    • 注解实现静态方法
    • 顶层方法实现静态方法
  • 总结

标准函数

首先我们介绍标准函数 with、run、apply,如果你了解javascript,那理解kotlin的标准函数width、run、apply那简直不要太轻松。with、run、apply与javascript中的with的意义基本一模一样,只是含有一些细微差别。

with

with它接收两个参数,第一个参数可以是任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个对象的上下文,可以直接使用对象的属性或方法,而不需要带上对象前缀。with函数会使用Lambda表达式中的最后一行代码作为返回值返回。

val result = with(obj) {
	// 这里是obj的上下文环境
	doSomething() // 调用obj的doSomething方法,无需 obj.doSomething() 这种形式调用
}

run

run函数的用法与使用场景和with函数非常类似,只是做了些许改动。run函数无法直接调用,他需要在某个对象的基础上去调用它;其次run函数值接收一个Lambda表达式作为参数,并且会在Lambda表达中提供调用对象的上下文,同样将Lambda表达式中的最后一行代码作为返回值。

val result = obj.run {
// 这里是obj的上下文环境
doSomething() // 调用obj的doSomething方法,无需 obj.doSomething() 这种形式调用
}

apply

apply函数和run函数在用法上基本一模一样,唯一区别是apply函数不会将Lambda表达式中的最后一行作为参数返回,而是会返回对象本身.

val result = obj.apply {
// 这里是obj的上下文环境
	doSomething() // 调用obj的doSomething方法,无需 obj.doSomething() 这种形式调用
}
// result == obj

静态方法

在java中定义一个静态方法如下:

public class Util {
	public static void doSome() {
		// todo
	}
}

// 使用静态方法
Util.doSome()

而Kotlin提供了几种方式去实现类似java中的静态方法

单例类实现静态方法

// 声明一个单例类
object Util {
	fun doSome() {
		// todo
	}
}
// 使用
Util.doSome()

伴生类实现静态方法

单例类的写法会让类中的所有方法全部变成了类似静态方法的调用形式,如果我们只是希望类中的某些方法变成静态方法的调用形式怎么办呢?kotlin给我们提供了伴生类 companion object。

class Utl {
	companion obj {
		fun doSome() {
		// todo
		}
	}
}

// 使用
Util.doSome()

这个关键字实际会在Util类的内部创建一个伴生类,Kotlin会保证一个类中只会存在一个伴生类对象,调用Util.doSome()实际上是调用Util类中的伴生类对象的doSome方法。

注解实现静态方法

如果我们确确实实需要定义真正的静态方法,我们可以给单例类或companion object伴生类中的方法加上 @JvmStatic注解,那么kotlin编译器就会将这些方法编译成真正的静态方法。注意这个注释一般加在单例类或伴生类的方法上,如果加在普通方法上,会直接提示语法错误。

class Utl {
	companion obj {
		@JvmStatic
		fun doSome() {
		// todo
		}
	}
}

// 使用
Util.doSome()

顶层方法实现静态方法

顶层方法指的是哪些没有定义在任何类中的方法,比如我们编写的main()方法。kotlin编译器会将所有的顶层方法全部编译成静态方法。所有的顶层方法在任何位置可以直接被调用,不用管包名路径,也不用创建实例。但如果这个方法在Java代码中调用,需要加上该方法所在的文件名。

// 如我们在Tool.kt 文件中创建了一个顶层方法
// Tool.kt
fun doSome() {
	// todo
}

// 在java代码中使用
public class JavaTest {
	public void invokeStaticFunc() {
		// 文件名+方法形式调用顶层方法
		Tool.doSome()
	}
}

总结

到此这篇关于kotlin快速入门之标准函数与静态方法的文章就介绍到这了,更多相关kotlin标准函数与静态方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Kotlin中如何实现类似Java或C#中的静态方法

    大家可以在网络上搜到不少这样的文章,官方推荐是包级函数,也有人说用伴生对象(companion class).这些都是不错的选择,但并不完善,我们在不同的情况下有更好的选择.我总结了几种方法,分别是:包级函数.伴生对象.扩展函数和对象声明.这需要大家根据不同的情况进行选择. 一.包级函数 Kotlin和Java及C#不同的是,可以在包里面直接声明函数.做法和类中是一样的,这里就不多说了,的确是一个非常好的选择.适用于函数不需要不包内部的类进行数据共享的方法. 二.伴生对象 从语义上来讲,伴生函数

  • Kotlin中标准函数run、with、let、also与apply的使用和区别详解

    前言 和Java相比,在Kotlin中提供了不少新的特性.这次我们就来聊一聊Kotlin的一些通用的扩展标准函数run,with,let,also和apply.对于这五个标准函数它们都存在于Kotlin的源码标准库当中,也就是在Standard.kt文件当中.它们都是适用于任何对象的通用扩展函数.但是对于run,with,let,also和apply这五个函数他们的用法及其相似,以至于我们无法确定去选择使用哪一个.那么现在我们就来聊一下这五个函数它们的使用方法,它们的不同之处以及在什么场景下去使

  • Kotlin实现静态方法

    工具类 全都是静态方法的情况 : class 类名 改为 object 类名 即可 package redwolf.com.moreimageupload import okhttp3.MultipartBody import java.io.File /** * @作者 RedWolf * @时间 2017/5/20 10:52 * @简介 MoreImageUtils.kt */ object MoreImageUtils { fun filesToMultipartBodyParts(fi

  • Kotlin使用静态变量与静态方法详解

    前言 在日常开发过程中,静态变量和  静态方法 是我们常见的用法,Java中相信大家并不陌生了,那么在 Kotlin 中该如何使用呢? 其实很简单,只需要一个将变量和方法包含在 companion object 域中即可,比如这样: class Constant { companion object { // 接口根地址 const val BASE_URL = "http://xxxx.xxx.xxx/" // 友盟 const val UMENG_APP_KEY = "x

  • kotlin快速入门之标准函数与静态方法

    目录 标准函数 with run apply 静态方法 单例类实现静态方法 伴生类实现静态方法 注解实现静态方法 顶层方法实现静态方法 总结 标准函数 首先我们介绍标准函数 with.run.apply,如果你了解javascript,那理解kotlin的标准函数width.run.apply那简直不要太轻松.with.run.apply与javascript中的with的意义基本一模一样,只是含有一些细微差别. with with它接收两个参数,第一个参数可以是任意类型的对象,第二个参数是一个

  • Kotlin 标准函数和静态方法示例详解

    目录 标准函数 with run Apply 定义静态方法 注解 顶层方法 标准函数 with with 的作用是可以在连续调用同一对象的多个方法时让代码变得更加精简 val result = with(obj){ //这里是obj的上下文 "value" //with 函数的返回值 } 看个例子,例如有一个水果列表,现在我们想吃完所有水果,并将结果打印出来 val list = listOf("Apple","Banana","Ora

  • Kotlin标准函数与静态方法应用详解

    目录 标准函数 with函数 run函数 apply函数 静态方法 单例类 companion object 注解 顶层方法 标准函数 标准函数就是在Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数 let函数就属于是一个标准函数,经常配合?.操作符来进行判空处理 with函数 with函数接收两个参数,第一参数可以是任何类型的对象,第二个参数是一个Lambda表达式 with函数会在Lambda表达式中提供第一个参数的上下文,并使用Lambda表达式的

  • Kotlin标准函数与静态方法基础知识详解

    目录 标准函数with与run和apply with函数 with函数 run函数 apply函数 定义静态方法 标准函数with与run和apply with函数 with函数 接收两个参数:第一个参数可以是任意类型的对象,第二个参数是一个Lambda表达式.with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回. 示例代码如下: val result=with(obj){ //这里是obj的上下文 "value"//w

  • 快速入门Java中的Lambda表达式

    Lambda简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块). Lambda表达式还增强了集合库. Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及 java.util.stream 包. 流(stream)就如同迭代器(iterator),但附加了许多

  • ASP.NET Core快速入门之实战篇

    NO1 留言板(mysql的使用) 演示:http://haojima.net 这个功能很简单.就是对数据库的写入和展示.如果在Windows下,相信大家分分钟都可以搞定.而初次接触.net core + mysql可能需要注意些细节. 首先打开vs2017新建一个asp.net core项目(选Web应用程序),然后nuget 导入Microsoft.EntityFrameworkCore.Tools 1.1.1和MySql.Data.EntityFrameworkCore 8.0.8-dmr

  • 初学者,Spring快速入门

    目录 1.spring 1.1.优点 1.2.缺点 1.3.Spring框架的组成结构图 1.3.1.核心容器 1.3.2.AOP 和设备支持 1.3.3.数据访问与集成 1.3.4.Web 1.3.5.消息(Messaging) 1.3.6.Test 2.Spring核心ioc 2.1.ioc容器 2.1.1.BeanFactory 容器 2.1.2. ApplicationContext 容器 2.2.使用ioc容器 2.2.1.beans.xml 2.2.2.pojo.User 2.2.3

  • hibernate4快速入门实例详解

    Hibernate是什么 Hibernate是一个轻量级的ORMapping框架 ORMapping原理(Object RelationalMapping) ORMapping基本对应规则: 1:类跟表相对应 2:类的属性跟表的字段相对应 3:类的实例与表中具体的一条记录相对应 4:一个类可以对应多个表,一个表也可以对应对个类 5:DB中的表可以没有主键,但是Object中必须设置主键字段 6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系 7:Object中属性的个数和名称可

  • 新手如何快速入门Python(菜鸟必看篇)

    学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层.虽然万事开头难,但好的开始是成功的一半,今天这篇文章就来谈谈如何开始入门Python.只要方向对了,就不怕路远. 设定目标 当你决定入门 Python 时,需要一个清晰且短期内可实现的目标,比如通过学习找一份初级程序员工作,目标明确后,你需要了解企业对初级程序员有哪些技能要求,下面是我从拉勾网找的一个初级 Python 工程师的任职要求: 1.熟悉 Pytho

  • MongoDB快速入门笔记(八)之MongoDB的java驱动操作代码讲解

    MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个). 下面代码给大家介绍MongoDB的java驱动操作,具体代码如下所示: import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import org.bson.Document; import com.mongodb.MongoClient; impo

随机推荐