首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【码上开学】Kotlin 高阶函数、匿名函数和 Lambda 表达式

你能怎么使用双冒号加函数名,就能怎么使用匿名函数,以及怎么使用 Lambda 表达式。 这,就是 Kotlin 匿名函数和 Lambda 表达式本质,它们都是函数类型对象。...另外呢,Kotlin 是不支持使用 Lambda 方式来简写匿名对象,因为我们有函数类型参数嘛,所以这种单函数接口写法就直接没必要了。那你还支持它干嘛?...不过当和 Java 交互时候,Kotlin 是支持这种用法:当你函数参数是 Java 单抽象方法接口时候,你依然可以使用 Lambda 来写参数。...但这其实也不是 Kotlin 增加了功能,而是对于来自 Java 单抽象方法接口,Kotlin 会为它们额外创建一个把参数替换为函数类型桥接方法,让你可以间接地创建 Java 匿名对象。...简单总结一下: 在 Kotlin 里,有一 Java 不存在类型,叫做「函数类型」,这一类型对象在可以当函数来用同时,还能作为函数参数、函数返回值以及赋值给变量; 创建一个函数类型对象有三种方式

2.1K20

那个男人再发力,原来我以前学 Lambda 都是假

你能怎么使用双冒号加函数名,就能怎么使用匿名函数,以及怎么使用 Lambda 表达式。 这,就是 Kotlin 匿名函数和 Lambda 表达式本质,它们都是函数类型对象。...另外呢,Kotlin 是不支持使用 Lambda 方式来简写匿名对象,因为我们有函数类型参数嘛,所以这种单函数接口写法就直接没必要了。那你还支持它干嘛?...不过当和 Java 交互时候,Kotlin 是支持这种用法:当你函数参数是 Java 单抽象方法接口时候,你依然可以使用 Lambda 来写参数。...但这其实也不是 Kotlin 增加了功能,而是对于来自 Java 单抽象方法接口,Kotlin 会为它们额外创建一个把参数替换为函数类型桥接方法,让你可以间接地创建 Java 匿名对象。...简单总结一下: 在 Kotlin 里,有一 Java 不存在类型,叫做「函数类型」,这一类型对象在可以当函数来用同时,还能作为函数参数、函数返回值以及赋值给变量; 创建一个函数类型对象有三种方式

64020
您找到你想要的搜索结果了吗?
是的
没有找到

KotlinKotlin使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式 = 接口#函数类型对象 )

语法 , 将 函数参数 移到括号外面 使用 Lambda 表达式表示 ; 正常调用方式如下 : 函数参数 放在 括号进行传递 ; foo(5, { x -> x * x }) 使用 尾随 Lambda...语法 调用方式 : 将第二个函数参数提取到括号外面 , 也就是将 Lambda 表达式 写在括号外部 ; foo(5) { x -> x * x } 二、Kotlin使用 Lambda...表达式替代对象表达式原理 ---- 1、Lambda 替换对象表达式 在使用 Kotlin 开发时 , 经常遇到这种情况 , 最后一个函数是匿名内部类 , 匿名内部类只实现了一个函数 , 此时使用 Lambda...{ // 点击事件 } 2、原理分析 Kotlin 对象表达式 , object : View.OnClickListener { override fun onClick(view: View...接口中 void onClick(View v); 函数类型 ; 如果 在 setOnClickListener 函数设置了 (View) -> Unit 类型 Lambda 表达式 , Kotlin

1.2K20

Kotlin难点

如果我们需要使用成员函数或扩展函数,它需要是限定,例如 String::toCharArray。...val c = MyClass::class 该引用是 KClass 类型值 请注意,Kotlin 引用与 Java 引用不同。...() } //另外,如果这个 Lambda 是单参数,它这个参数也省略掉写: //根据上下文推导,根据最后一行代码来推断出返回值类型 view.setOnClickListener...这些函数基本上做了同样事情:在一个对象上执行一个代码块。不同是这个对象在块如何使用,以及整个表达式结果是什么。...let 允许我们自定义参数名字,使可读性更强,如果倾向可读性可以选择 T.let 参考文章 Kotlin 高阶函数、匿名函数和 Lambda 表达式 Kotlin官网

41340

Kotlin 基础 | 拒绝语法噪音

kotlin方法默认是final(可省略写),这意味着默认情况下,方法是不允许被继承和重写(这是为了防止脆弱,即对基方法修改会导致子类出现预期之外行为)。...int包装kotlin没有基本数据类型。...在扩展函数,可以像其他成员函数一样访问属性和方法(除了被private和protected修饰成员)。...kotlin 方法默认是final,他们不能被继承和重写。只有通过加上open后才能被继承和重写。 kotlin 没有基本数据类型,而是用其对应包装表示。...置于类型之后表示这个类型变量或返回值值可能为null。 kotlin 使用扩展函数,可以在体外给新增方法kotlin 预定了很多扩展函数,其中有一适用于“对同一个对象做多次操作”。

1.1K30

Kotlin 轻量级Android开发

项目所需要库应该尽可能小。Android对于方法数量有严格限制,Kotlin只额外增加了大约6000个方法。 互操作:Kotlin可与Java语言无缝通信。...除此之外,Kotlin代码还可以为Java代码所用,这意味着我们可以使用这两种语言来构建软件。你可以使用Kotlin开发新特性,同时使用Java实现代码基其他部分。...: "" 数据data 在Java,如果想要创建数据或是POJO(只保存了一些状态),我们需要创建一个拥有大量字段、getters与setters,也许还要提供toString...互操作 Kotlin提供了一些非常棒互操作特性,这对于Android开发帮助非常大。其中之一就是拥有单个方法接口与lambda表达式之间映射。...接口默认实现 顾名思义,它便是指接口可以和抽象一样,有方法默认实现。 我把它归结在语法糖里,是因为java8早已有了一模一样东西,对应关键字叫default。

90810

Kotlin | 与Java互调那些事

{} public void toNull(String title){} } Kotlin调用 Kt调用- Java中使用kt关键字声明变量和方法 kotlin调用java方法,参数时...`object` Kt调用Java-SAM转换 在Kotlin调用带有接口参数方法时,如果这个接口只有一个方法,那么就可以通过 lambda 表达式实现 SAM转换,从而简化我们代码。...Java调用Kt-扩展函数 @file:JvmName(“xx”) 在java中使用Kotlin扩展函数时,我们都会使用相应名+Kt 去调用相关方法,有时候我们想自定义相应工具,就显得稍显麻烦...Kotlin 伴生对象方法或者变量时,必须通过 名.Companion.xx 方式才可以调用。...Java调用Kt-方法默认参数值 @JvmOverloads 在Kotlin,对于方法参数,我们可能会加入一些默认值,便于更好使用,但是在Java,如果调用时传递相应方法参数,就会提示报错,这种使用就可以使用

92430

Kotlinsam(函数式接口)详解

lambda表达式去表示java匿名实例 在使用java去给一个按钮设置监听我们通常会通过创建匿名实例,如下 Button.setOnClickListener(new OnClickListener...把lambda当作参数传递给Java方法 我们在java定义一个 void postponeComputation(int delay,Runnable computation){ } 然后使用lambda...println(42) } }) 但实际不一样是,每次调用这种语句会重复创建Runnable对象,而使用lambda表达式作为实参如果没有访问任何来自定义函数变量那么只会创建一个对象....SAM构造方法:显式地把lambda转换成函数式接口. 在有的方法需要返回一个函数式接口,不能返回一个lambda, 可以用SAM构造方法把它包装起来....SAM构造方法只接收一个参数-一个被用作函数式接口单抽象方法lambda,并返回一个接口实例.

1.6K40

Kotlin 学习笔记(三)

Kotlin 自定义操作符 学习 Kotlin 一段时间后,你会发现 Kotlin 给了开发者很大自我发展空间。比如:支持对新增扩展函数,支持运算符重载等。...还记得 Kotlin internal 访问修饰符吗?它限定了被它修饰函数只能在当前模块使用,而不能在其他模块使用。...最后,这种反引号用法推荐使用!了解即可! 4. Kotlin 对象比较 在 Java ,要比较两个对象是否相等,通常用是 == 或 equals 方法。... String 构造方法,不能直接传入一个字符串,所以这里用是 Java String 进行初始化。...Kotlin inline、crossinline、noinline 关键字特殊使用 在前面的第2节 Kotlin 自定义操作符,已经说明了 inline 关键字基本用法,知道了内联函数可以通过直接将代码拷贝到调用地方从而加快程序执行速度特性

54510

Kotlin 使用高阶函数实现回调方式

lambda 和 高阶函数 之前学习了 lambda 和高阶函数,然后在 android 开发onClick 事件进行监听是一个很常用功能,kotlin 常规实现如下: rootView.setOnClickListener...{ view - println("点击了这个ID=${view.id}view") } 然后在开发不可避免我们也要写一些自定义监听之类代码。...java 思想实现 在 java 我们一般做法是这样 定义一个接口 定义一个接口类型变量 定义一个 set 方法 调用 set 方法设置接口实现kotlin 实现就是如下 class...最后猜想是因为 kotlin 在和 java 互相调用时候中间又包裹了一层,而我们直接使用 kotlin 来定义这个接口不存在中间这一层,而我们定义 set 方法又不是一个高阶函数,当然不能使用 lambda...在函数式编程思想函数是一等公民,在使用 kotlin 时我们要多利用这种思维来思考问题。

1.8K10

如何让你回调更具Kotlin风味

那么今天一起来说说如何让你回调更具kotlin风味: 1、Java回调实现 2、使用Kotlin来改造Java回调 3、进一步让你回调更具Kotlin风味 4、Object对象表达式回调和DSL...四、DSL配置回调基本步骤 在Kotlin一个实现了DSL配置回调非常简单主要就三步: 1、定义一个回调Builder,并且在定义回调lamba表达式对象成员,最后再定义Builder成员函数...特性,在该lambda作用域this可以内部表达为Builder实例,利用Builder实例调用它内部定义成员函数并且赋值初始化Builder回调lambda成员实例,而这些被初始化过lambda...如果在该lambda内部没有调用某个成员方法,那么在该Builder这个回调lambda成员实例就是为null,即使内部事件触发,为空就不会回调到外部。...换句话就是外部回调函数block块会通过Builder成员函数初始化Builder回调lambda实例(在上述代码表现就是mXXXAction实例),然后当内部事件触发后,根据当前lambda

1.6K20

kotlin实战教程之lambda编程

本文是对<<kotlin实战 lambda编程”一章总结,主要记录了一些我认为比较重要点 在kotlin中常见lambda用法主要由以下几种: 与集合一起使用 lambda可以与任意java...{ override fun run(){ print(42) } }) 当你显示声明这个参数对象时,每次调用都会创建一个新实例,而使用lambda情况不同:如果lambda没有访问任何来自自定义函数变量...至于为什么将会在 Lambda实现细节讲到。 Lambda实现细节 在kotlin,每个函数式接口lambda都会被编译成一个匿名(除内联lambda)。...带接收者lambda: with 与 apply 这两个函数式kotlin标准库函数。带接受者是指:在lambda函数体可以调用一个不同对象方法,而且无须借助任何额外限定符。...,这表示每调用一次lambda表达式,一个额外就会被创建,为了解决这个运行时性能开销,kotlin提供了inline修饰符,如果使用inline 修饰符标记一个函数,在函数被使用时候编译器并不会生成函数调用代码

71630

Kotlin | 一份10万字随查笔记,妈妈再也担心我不会Ctrl+F了

深入理解Kotlin协程-bennyhuo大佬前期推荐,难度过高,很可能从憧憬这本书变为骂骂咧咧塞到显示器底下。...args.forEach (::println) 成员(成员方法,成员变量) 什么是成员 属性:或者说成员变量,范围变量 方法:成员函数,范围函数 2....伴生对象成员全局独一份(对于来说) 伴生对象成员类似 Java 静态成员 在Kotlin,静态成员考虑用包级函数,包级变量替代 JvmField 和 JvmStatic 使用 Kotlin...get //在kotlin,默认会为参数添加set,get方法,如果需要自定义,按照以下方式写即可 class ClassTest1(override val number: Int) : SimpleInter...如下,两个模块 Kotlin: Java: 如果我们想避免Java直接访问到我们代码,可以加入以下小技巧,这样当Java调用时就会因规范而报错。

2.6K20

Kotlin热身篇: 简介与基本用法

Kotlin 基础语法 5.1 kotlin 方法 5.1.1 kotlin 方法声明 Kotlin 定义方式比较简单,括号是参数,格式: "函数名(参数名称: 参数): 返回类型",返回类型定义在括号外...5.1.3 kotlin 方法自动传参 Kotlin 可以在 构造方法或者相关函数大括号里面设置默认参数,这样传参就可以使用默认参数了,我们具体看看怎么使用吧~ ?...枚举和 when 表达式 5.8.2.1 kotlin 枚举 Kotlin ,枚举类型以形式存在,因此叫做枚举,详细代码如下: enum class Color { RED, GREEN...6.2.2 kotlin data Kotlin 里面声明一个 data 需要满足以下条件: data 必须要有一个构造方法,且包含至少一个参数 该 data 构造参数强制使用 val 或...6.5.2 可见修饰符 嵌套用法: 如果要在 Kotlin 嵌套一个,需要在该内部类加 inner 修饰 //嵌套类属于静态和外部类没任何关系 fun main(args : Array<String

1.6K30

Kotlin 1.4 版本正式发布:新功能一覽

可以在这管道添加一些自定义处理和/或转换,这些处理和转换将自动适用于所有目标。...调用,转换为一个对Lambda调用,减少大量模板代码,但是同样SamType如果定义在Kotlin,是无法转换: interface Action { fun run() } fun...Kotlin进行方法调用时可以通过参数名指定参数,也可以指定,按照声明顺序传参 fun f(a: Int, b: Int, c: Int) {} fun main() { f(1,...积跬步,无以至千里;积小流,无以成江河。 Kotlin 简介 Kotlin是一门非研究性语言,它是一门非常务实工业级编程语言,它使命就是帮助程序员们解决实际工程实践问题。...3.扩展函数 Kotlin 类似于 C# 和 Gosu, 它提供了为现有提供新功能扩展能力,而不必从该类继承或使用任何类型设计模式 (如装饰器模式)。

1.2K10

Kotlin 之美

EJ 第1条:考虑使用静态工厂方法代替构造器 在实例化对象方式使用静态工厂方法相比构造器有几个好处: 工厂方法拥有名字,易于开发者理解。...Kotlin 新增了顶层声明类别(顶层函数和顶层属性,无需放在属性和方法)。...public 修饰成员属性(即准则公有域),《Effective Java》 建议这么用,取而代之是将成员属性定义成私有的,并且提供 public 修饰 set 和 get 方法。...Kotlin 便是这个思路践行者,Kotlin 创建方法默认都是 final : class Parent{ fun action(){ } } /* // 等价于:...在2018年今天我们依然无法使用或者要花很大代价才能在 Android 编程中使用,而 Kotlin 则帮助我们解决了这一瓶颈,这也是我们拥抱 Kotlin 原因之一。

2.9K20

Kotlin 函数魔法 – lambda 表达式

lambda 表达式是指匿名函数一种写法,也可以拿来定义函数。...基本使用 lambda 表达式一般使用 {} 包裹 一般格式为 param -> body 用于定义函数: val foo = { str: String -> print(str) } foo("xxx...> Unit) { b(a) }复制代码 简化写法 在 Android 使用 在 Android 开发,我们经常会遇到这样一种回调结构: a.set(new B() { @override...onClick(View v) 方法体内语句复制代码 此时,该结构并不是简单一个函数,而是一个实现了接口匿名或是一个匿名抽象,不过 Kotlin 语法特点也可以大大减少这种样板代码编写,...最近在 Github 上维护项目: LiteWeather [一款用 Kotlin 编写,基于 MD 风格轻量天气 App],对使用 Kotlin 进行实际开发感兴趣同学可以看看,项目中会使用

31230

Kotlin —— 这次入门就不用放弃了

它可以扩展函数:这意味着,就算我们没有权限去访问这个代码,我们也可以扩展这个更多特性。 它是函数式Kotlin是基于面向对象语言。...但是就如其他很多现代语言那样,它使用了很多函数式编程概念,比如,使用lambda表达式来更方便地解决问题。其中一个很棒特性就是Collections处理方式。我稍后会进行介绍。...函数式支持 Collections迭代 Kotlin使用lambda表达式来更方便地解决问题。体现最好就是Collections处理方式。...先看Java,在Java,实现一个单例,我们需要: 保留一个单例对象静态实例 提供一个方法让外界访问唯一实例 构造方法采用private修饰符 而在Kotlin,一个修饰符就解决了。...而在Kotlin,可以使用reified,告别Class。 reified意思是具体化。作为Kotlin一个方法泛型关键字,它代表你可以在方法体内访问泛型指定JVM对象。

1.6K30

Kotlin了解一下!

Kotlin扩展函数是怎么实现 扩展函数调用看起来就像是原生方法一样自然,使用起来也非常顺手,但是这样方法会不会带来性能方面的掣肘呢?...3.2 如果扩展函数和现有的成员发生冲突,kotlin将会默认使用成员,这一步选择是在编译期处理,生成字节码是将会是调用成员方法,如下例子: class C{ fun foo...Kotlin不允许扩展一个已有的成员,原因也很好理解,我们希望扩展函数成为调用三方sdk漏洞,不过如果你试图使用重载方式创建扩展函数,这样是可行。...()是一个定义在G内部扩展函数,在这个扩展函数里,我们直接使用Int类型作为接受者类型,因为我们将扩展函数定义在了内部,即使我们设置访问权限为public,它也只能在该类或者该类子类中被访问,...Button") } 通常这些扩展函数可以放到基,根据扩展函数作用域知识,我们可以在所有子类中都调用到这些方法,所以kotlinActivity可以写成: // Kotlin class MainKotlinActivity

67230
领券