首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin】函数 ⑨ ( Kotlin 语言中闭包概念 | Java 语言中函数作为参数替代方案 )

在一个 脚本文件 中 , 如 Kotlin 脚本 , 就需要 使用 函数 进行作用域区分 , 将一个作用域内相关代码 , 都写在一个函数中 , 这样就可以将作用域分区分开 ; 匿名函数 作用域 :...和 全局变量 ; 在 匿名函数 B 中定义了 匿名函数 C , 则 在 匿名函数 C 中 , 可以引用 匿名函数 B , 函数 A 中变量 和 全局变量 ; 在 函数 A 中 , 不能引用 匿名函数...参数 或 返回值 函数 ; 使用 匿名函数 / Lambda 表达式 / 闭包 作为 参数 / 返回值 函数 是 高级函数 ; Kotlin 中经常使用 链式调用 , 就是 函数式编程 风格...; 二、Java 中函数作为参数替代方案 ( 匿名内部类 ) ---- Kotlin 中引入 函数类型 , 将 匿名函数 / Lambda 表达式 / 闭包 作为 函数参数 或 返回值 , 可以写出...更加灵活代码 ; Java 8 开始 支持 Lambda 表达式 , 但是 不支持 函数 作为参数 , 也 不支持将 函数 赋值给变量 ; Java 语言 将 函数 作为参数 替代方案 是 : 使用

97610

Kotlin中,函数作为参数,T.()->Unit 和 ()->Unit 区别

在做kotlin开发中,经常看到一些系统函数里,用函数作为参数,但是又和我们自己写不太一样 大概是这样子: public inline fun T.apply(block: T....f: () -> Unit) { } 我们这里注意一下,其实我们区别,就是系统是T.()-Unit,而我们定义是()->Unit 这里就很疑惑了,为什么?...我们这里来看一下文档是怎么说, ? 输入图片说明 我们这里看一下画原谅色线部分,原来这里作用就是可以this代表对象不同。...,这两个函数唯一区别就是T.()-Unit与()->Unit区别,我们调用时,在代码块里面写this,时候,根据代码提示,我们可以看到,连个this代表含义不一样,T.()->Unit里this...代表是自身实例,而()->Unit里,this代表是外部类实例 ---- The End

2K30

Kotlin 协程+Retrofit 最优雅网络请求使用

kotlin中使用不符合kotlin优雅 interface TestServer { @GET("banner/json") suspend fun banner(): ApiResponse...kotlin应该一行代码解决问题,才符合kotlin优雅 使用本框架后 interface TestServer { @GET("banner/json") suspend fun awaitBanner...或者用户自定义callAdapterFactory中 因此我们这边可以自定义CallAdapterFactory在调用后不进行网络请求访问,在用户调用具体方法时候再进行网络请求访问。...4.自定义CallAdapterFactory Retrofit在调用后直接进行了网络请求,因此很不好操作。我们把网络请求控制权放在我们手里,就能随意操作。...,在调用Retrofit后并不会请求网络,只会将网络请求所需要call放入await中。

2.9K10

Kotlin + 协程 + Retrofit + MVVM优雅实现网络请求

前言 最近一直闭关修炼Kotlin,说实话真香真好用,刚好公司准备交给我一个新项目,于是打算直接用Kotlin来构建项目。刚好整体架构搭建完毕了,于是把网络请求这一部分先分享给大家。...delay(10000) repository.getDatas() } datas.value = result } } ViewModel将作为...因为在协程进行请求过程中,若此时ViewModel销毁,里面的协程正在请求的话,将无法销毁,出现内存泄漏,所以在ViewModel onCleared 里面,即使结束协程任务,参考代码如下。...viewModelScope,但是我在引入该包时候,会报错,由于最近比较忙暂时还没来得急解决,后续问题有时间我也会继续修改,还望各位大佬能帮忙指点 2.优化请求代码 先看下之前请求代码 private...,就两句话,一句发起请求val result = repository.getDatas(),然后就是为我们LiveData赋值了,看起有没有同步代码感觉,这就是协程魅力所在,为了验证我们请求没有阻塞主线程

5.1K50

python测试开发django-172.jQuery 发送请求获取数据设置为全局变量

前言 网页上数据来源于ajax请求获取服务端数据,通常是写个触发方式获取数据加载到页面。...如果有多个地方需要获取同一个接口请求数据,每次都去触发请求会导致请求重复,像这种只触发一次请求,页面多个地方需要引用此数据情况,可以设置为全局变量。...jQuery请求数据 先定义全局变量res_obj,获取接口返回结果后重新赋值给res_obj // 获取接口返回数据设置为全局变量 var res_obj={}; $.ajax({...方法,这时候执行是两个线程。...如果设置async为true,那么是获取不到请求结果 // 获取接口返回数据设置为全局变量 var res_obj={}; $.ajax({ url: '/banks',

1.8K40

windows 10 使用localhost作为地址执行网络请求延迟问题解决方案

使用localhost作为地址执行网络请求时会有2s延时,这个问题在Linux并不存在,本文分析并提出解决方案。...问题复现 主要体现在windows 下,python 使用 flask 将 localhost 作为地址时有2s延迟 原因分析 问题在于解析localhost时,优先按照ipv6地址解析,这个可以通过...ping命令验证: C:\Users\Admin>ping localhost 正在 Ping VVD [::1] 具有 32 字节数据: 来自 ::1 回复: 时间<1ms 来自 ::1 回复...: 时间<1ms 解决方案 关闭ipv6方案尝试过几次,都没有效果 修改host文件添加 127.0.0.1 localhost 也没有用 问题症结在于ipv6和ipv4优先级,如果ipv4...: 来自 127.0.0.1 回复: 字节=32 时间<1ms TTL=64 来自 127.0.0.1 回复: 字节=32 时间<1ms TTL=64 而且使用localhost做地址执行各种任务都快了很多

94510

干货 | KotlinNative 异步并发模型初探

一、前言 作为 Kotlin Multiplatform 体系重要组成部分之一 Kotlin/Native ,目前还是一项处于 beta 阶段技术。...Kotlin/JVM 协程既能完成异步请求,也能完成并行计算,并且由于协程中拥有挂起(suspend),Kotlin/JVM 就可以在协程而非线程层面上来解决并发竞争问题。...但 Kotlin/Native 程序作为一种原生二进制程序,相当于是重新开发一门语言,由于没有现成类似于 JVM 提供异步并发机制作为依赖,所以它必须实现一套自己异步并发模型。...,也就是说它只能用来执行一些不占用 CPU 资源异步并发任务,例如网络请求。...注意,本文基于 Kotlin 1.3.61,Kotlin/Native 作为一个实验性项目,任何版本变动都有可能造成 API 破坏性变更。

1.6K20

Kotlin之旅——类特性

Kotlin 类特性 写了两篇 PWA 了,今天继续讲回 KotlinKotlin 中有很多非常好特性,扩展方法、伴生对象、原生支持动态代理、伪多继承。今天来详细讲讲。...= null if (animal is Dog) { //在这里你必须手动强转为Dog对象 animal.bark() } } 总有例外 如果智能转换对象是一个全局变量...朋友一个 Android 项目,所有网络请求包括回调和参数全部封装在了一个 BaseActivity 中,然后随着项目越来越大,这一些网络请求方法想要抽出来,但又害怕牵连到线上改动,我就推荐他用个动态代理来做...这样一个场景,使用一个代理类实现所有需要获取信息接口方法。然后让不同子类去实现所需接口,请求统一交给代理类完成。...这样不仅维护网络请求信息方便,而且每个类不会有额外多出来方法防止新人接触项目的时候调用错请求方法。

87220

Kotlin 1.2 有哪些新特性

原文链接是《What's New in Kotlin 1.2》,下面的译文节选了“其它语言特性”部分(“Other Language Features”) 通过注解声明数组变量 从Kotlin1.2...关键字lateinit支持全局变量和局部变量 现在lateinit修饰符能够用于全局变量和局部变量了,也就是说,二者都允许延迟初始化。...例如,当lambda表达式在构造一个对象时,允许将延迟初始化属性作为构造参数传过去。...,能够推断出变量类型 Kotlin编译器现在支持通过强制转换信息,来推断出变量类型。...如果你在调用一个返回“T”泛型方法时,试图将它返回值“T”转换为特定类型如“Foo”,编译器现在知道这个方法调用中“T”其实是“Foo”类型。

87020

使用Kotlin Coroutines简单改造原有的爬虫框架

爬虫框架基本原理: 对于单个爬虫而言,从消息队列 queue 中获取 request,然后通过下载器 downloader 完成网络请求并获得 html 内容,通过解析器 parser 解析 html...协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来时候,恢复先前保存寄存器上下文和栈,直接操作栈则基本没有内核切换开销,可以不加锁访问全局变量,所以上下文切换非常快。...Kotlin 版本要相符和。...我所使用 Kotlin 版本是1.2.41 下面是修改之后 Kotlin 代码,原有的各种组件接口依然可以使用。...之后, run、apply 等 Kotlin 标准库扩展函数替代了原先 RxJava map 操作。 Kotlin 协程是无阻塞异步编程方式。上面看似同步代码,其实是异步实现

1.3K20

基于 Node.js 环境 KotlinJs 工程完美搭建

为什么需要这样一篇文章 我们知道 Kotlin 对 Jvm 支持实在是太好了,以至于我们创建一个 Java 工程,配置一下 Kotlin 编译插件和标准库就可以很轻松愉快开始玩耍,什么互调用、什么单步调试都没有毛病...还需要管理 JavaScript 映射到 Kotlin 接口依赖,例如 jQuery 在 Kotlinjs 侧就有一个接口库方便 Kotlin 以类型安全方式调用,不过你还是要自己安装好 jQuery...右键运行 Kotlin main 函数,就像我们在 KotlinJvm 当中一样 单步调试 Kotlin 代码,全程对 JavaScript 编译结果无感知 基于这个工程,大家就可以很愉快测试...当然这时候肯定是会报错,它会报错说没有 kotlin 这个东西,因为默认情况下 KotlinJs 编译得到 JavaScript 是 plain 类型,引用依赖都需要作为全局变量出现。...这时候你当然可以选择继续运行了,不过还是会报错,虽然编译结果已经能够主动去 require('kotlin'),但这个 kotlin 在哪儿呢?

1.4K20

5. 函数声明与闭包(Closure)

其实 Kotlin 就基本没有新东西,不,是新语言都基本没有新东西。新语言都是把近些年好用特性组装起来,再加点自己见解,因地制宜 一下。 0....一般函数,能处理只有入参和全局变量,然后返回一个结果。闭包比普通函数更多一点能力,它还捕获了当前环境局部变量。...但和闭包不一样是,匿名类无法修改捕获局部变量(final 不可修改)。 而匿名类能引用 final 局部变量,是因为在编译阶段,会把该局部变量作为匿名类构造参数传入。...这和 Kotlin 做法本质上是一样,即通过持有该变量引用来使得两个类可以修改同一个变量。 3....总结 根据上面分析,我们可以了解到: 闭包不是新东西,是把函数作为“一等公民”编程语言特性; 匿名类是 Java 世界里闭包,但有局限性,即只能读 final 变量,不能写任何变量; Kotlin

1.1K20
领券