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

kotlin入门之泛型

泛型 将具体的类型泛化,编码的时候用符号来代类型,使用时再确定他的类型。 因为泛型的存在,我们可以省去强制类型转化。 泛型是跟类型相关的,那么是不是也能使用与类型的多态呢?...对应的还有一个概念叫「消费者 Consumer」,对应 Java 里面另一个泛型通配符 ? super。 ? super List<?...表示List的泛型类型是一个未知类型 super限制了这个未知类型的下界,也就是这个泛型类型必须满足这个super 限制条件 super我们类的方法里面经常用到,这里的范围不仅包括Button...它在 Kotlin 中有等效的写法:* 号,相当于out Any。...实际上,我们可以声明一个inline函数,使其类型实参不被擦除,但是这在Java中是不行的。

1.1K20

OpenCV-Python学习(3)—— OpenCV 图像色彩空间转换

学习目标 图像色彩空间; 函数说明与解释; 学习如何将图像从一个色彩空间转换到另一个,像BGR↔灰色,BGR↔HSV等; 学习 cv.cvtColor 函数的使用。 2. 常见色彩空间 3....色彩空间转换注意事项 从一个色彩空间转换到另一个色彩空间,信息传递会损失; 从一个色彩空间转换到另一个色彩空间,过程可逆与不可逆。 6....6.2 注意 HSV的色相范围为[0,179],饱和度范围为[0,255],范围为[0,255]。 OpenCV中有超过150种颜色空间转换方法。 最广泛使用的是BGR↔灰色和BGR↔HSV。...总结 从一个色彩空间转换到另一个色彩空间,信息传递会损失; 从一个色彩空间转换到另一个色彩空间,过程可逆与不可逆。...HSV的色相范围为[0,179],饱和度范围为[0,255],范围为[0,255]。 OpenCV中有超过150种颜色空间转换方法。 最广泛使用的是BGR↔灰色和BGR↔HSV。

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

Kotlin基础学习之循环和异常

前言 Kotlin并没有想象中的那么牛逼哄哄,也并不难,更喜欢他看做一枚语法糖,所谓的语法糖就是:能够代码变得更加简单易读的辅助工具。...迭代数字 Java 中的 for 循环,总是先初始化,判断是否限定的范围内,每一次循环更新,一直到超出范围。...同时,上面的代码中还有另一个简单的小技巧:你可以用map[key]来获取值,也可以用map[key] = value来设置,而不用调用get() put()方法。 .....Kotlin 中使用 in 来检查一个是否区间中,或者它的逆运算 !in。同时 in 也可以作为 when 的分支。...同时 Kotlin 中的 throw 结构以及 try…catch 结构和 Kotlin 中的 if 语句一样是表达式,可以作为另一个表达式的一部分使用。

63610

从 Java 到 Kotlin,再从 Kotlin 回归 Java

这是 Kotlin 感到最大惊喜的地方。看看这个函数: ? 当你调用 inc(1) 的时候会输出什么呢? Kotlin方法参数是一个,所以你不能改变 num 参数。...这是好的语言设计,因为你不应该改变方法的参数。但是你可以用相同的名称定义另一个变量,并按照你想要的方式初始化。现在,在这个方法级别的范围中你拥有两叫做 num 的变量。...当然,同一时间你只能访问其中一个num,所以 num 的会改变。将军,无解了。 if 主体中,你可以添加另一个 num,这并不令人震惊(新的块级别作用域)。... Kotlin 中,当你申明一个 var 或者 val 时,你通常编译器从右边的表达式类型中猜测变量类型。我们将其称做局部变量类型推断,这对程序员来说是一个很大的改进。...“没问题,可以使用伴生对象。” “伴生对象是什么鬼?” “它是与类绑定的一个单例对象。你可以日志记录器放在伴生对象中,” Kotlin 如此解释。 “明白了。是这样吗?” ? “对!

1.8K40

【译】LiveData with Coroutines and Flow

如果我们ViewModel中有一个对Activity的引用,我们将需要确保。 当视图被销毁时清除它 如果视图处于transitional状态,避免访问。...这就是为什么我们《应用程序架构指南》中推荐这种方法。 Scopes 由于Activities和Fragments比ViewModels有相等或更短的寿命,我们可以开始讨论操作的范围了。...我们需要一种方法来结构化这种并发性! 一个非常方便的解决方案是Kotlin Coroutines。 我们喜欢Android中使用Coroutines有很多原因。其中一些是。 很容易脱离主线程。...这意味着你不得不定义你的操作范围,而且你可以享受一些代码层面的保证,从而消除大量的模板代码,如清理代码等。你可以结构化并发想象成“自动取消”。...它们只运行一次,可以返回一个结果 返回多个的操作。

1.4K10

Arduino上传数据至贝壳物联并与FPGA进行交互

本篇实现Arduino与FPGA交互,当然也没有什么新的协议,还是基于串口通讯,现在学一个串口通信基本上可以驱动大多数模块了,而且和各种单片机无缝数据交互,Arduino由于其强大的库函数支持...,实现很多事情上会方便很多,比如串口通讯,Arduino就两行的代码,Verilog至少也得上百行,但是从学习知识的角度上来说,学Arduino也只不过是学了一门软件操控硬件的方法罢了,而且很多东西都简化了...再看一下官方给的解释,即把一个从一个范围换到另一个范围。...使用Arduino采集到土壤湿度模块的数据,200-100不等,Arduino读取模拟量的最大数值为1023,而这么大的数据,也并不是我们需要的,我们需要的是一个百分数,所以使用map函数,0-1023...添加一个数据接口,这里可以修改借口类型 ? 添加完成后,每一个设备都有自己专属的ID,APIKEY, ? 每个设备有对应的数据接口,也有对应的ID ? 需要几个数据接口你就添加几个,这里添加了四

1.7K80

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

5.1.3 kotlin 方法自动传参 Kotlin 可以 构造方法或者相关函数大括号里面设置默认参数,这样传参就可以使用默认参数了,我们具体看看怎么使用的吧~ ?...第二参数可以省略,此时会使用默认 ? ? 不省略时跟 Java 无异 ?...如果需要声明一个变量可为空,仅需变量类型后面加上? val n: String?=null 声明一个变量可为空,仅需变量类型后面加上?...}"//执行结果为“adb.length is 3” 5.5 kotlin 双冒号操作符 双冒号操作符 表示一个方法(变量)当做一个参数,传递到另一个方法(变量)中进行使用,和 Java8 类似...6.2.2 kotlin data 类 Kotlin 里面声明一个 data 类需要满足以下条件: data 类必须要有一个构造方法,且包含至少一个参数 该 data 类构造参数强制使用 val 或

1.6K30

基于 Kotlin 特性开发的有限状态机

每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态, 状态机停止。 二....Guards(检测器):检测器出现的原因是为了转换操作执行后检测结果是否满足特定条件从一个状态切换到一个状态 Interceptor(拦截器):对当前状态改变前、后进行监听拦截。 ?...DFA 的特性: 没有冲突:一个状态对于同样的输入,不能有多个规则,即每个输入只能有一个转移规则; 没有遗漏:每个状态都必须针对每个可能的输入字符有至少一个规则 以前写过的一篇文章《一个快速分析android...: 触发事件 * @param targetState: 下一个状态 * @param guard: 断言接口,为了转换操作执行后检测结果是否满足特定条件从一个状态切换到一个状态...state ${this.name}") override fun toString(): String = name.javaClass.simpleName } Transition 从一个状态切换到另一个状态

1.3K20

你绝对想不到 Kotlin 泛型给反射留下了怎样的坑!

话说呀,我们有一个很简单的需求,就是为很多个类添加一个 description 方法,这个方法的返回就是这个类的属性名以及,例如下面这个类: class Person(val name: String...it.get(this@description) 这一句看上去很合理,it 是一个属性的反射引用,通过 get 传入调用者 this 来获取当前属性的,很正常嘛,我们 Java 中都是这么干的呀。...当时就惊呆了,还以为这两种获取 KClass 的方式有什么重大差别呢,结果跟了下源码,是的,this::class 这种写法调试的时候也是可以强制跳入调用栈的(反编译看字节码也可以),二位居然都是调用了下面的方法来获取...Kotlin 调用处做了一次类型强一个强转成了 KClass,一个强转成了 KClass 。。。...就问一句,你们这么搞,良心不痛吗? 4. 小结 这篇文章讲述了一个Kotlin 泛型类型严格导致某些情况下反射代码编译不通过的故事。

8.2K21

从 Java 到 Kotlin,再从 Kotlin 回归 Java

Kotlin方法参数是一个,所以你不能改变 num 参数。这是好的语言设计,因为你不应该改变方法的参数。但是你可以用相同的名称定义另一个变量,并按照你想要的方式初始化。...现在,在这个方法级别的范围中你拥有两叫做 num 的变量。当然,同一时间你只能访问其中一个num,所以 num 的会改变。将军,无解了。... if 主体中,你可以添加另一个 num,这并不令人震惊(新的块级别作用域)。 好的, Kotlin 中,inc(1) 输出 2。但是Java中,等效代码将无法通过编译。...不知道。不过知道这会加大使用Kotlin的难度。 第二问题。阅读一个方法声明的时候,你最先想知道的应该是方法的名称和返回类型,然后才会去了解参数。...“它是与类绑定的一个单例对象。你可以日志记录器放在伴生对象中,” Kotlin 如此解释。 “明白了。是这样吗?”

1.5K10

Kotlin | 6.Kotlin 的类型系统

中这表示它必须包含一个String实例) // strLen(null) // 如果允许调用这个方法的时候传给它所有的可能的实参,包括null,需要显示地类型名称后面加上问号来标记它...以及该类型的可以完成的操作 * 可空和非可空的对象在运行时没有什么区别; * 可空类型并不是非空类型的包装。...它允许你一次null检查和一次方法调用合并成一个操作 val ok: String? = null println(ok?....// 从一个文件中读取文本行的列表,并尝试每一行文本解析成一个数字 fun readNumbers(reader: BufferedReader): List<Int...运算符提供了 种简单的方式来转换成 类型,以及处理当它拥有不同类型时的情况。 Java 中的类型 Kotlin 中被解释成平台类型,允许开发者它们当作可空或非空来对待。

2.3K10

Kotlin | 10. 注解与反射

类名后加上 ::class:@MyAnnotation (MyClass:class) * - 要把另一个注解指定为一个实参,去掉直接名称前面的 @。...指导Kotlin编译器为带默认参数值的函数生成多个重载(函数) * - @JvmField 可以应用于一个属性,这个属性暴露成一个没有访问器的共有Java字段...Kotlin可以你应用注解的目标的范围比 Java 更广,其中包括了文件和表达式。...一个注解的参数可以一个基本数据类型、一个字符串、一个枚举、一个类引用、一个其他注解类的实例,或者前面这些元素组成的数组。...注解类的声明是这样的,它是一个拥有主构造方法且没有类主体的类,其构造方法中所有参数都被标记成 val 属性。 元注解可以用来指定(使用点)目标、保留期模式和其他注解的特性。

92610

Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

对 Jetpack Compose 感兴趣的同学可以看一下另一个笔记系列—— Jetpack Compose 学习笔记。这次咱来看看 Kotlin 协程的基础知识。 1....它并不局限于任何语言,不仅 Kotlin 中有对协程的实现,Python、Go 等语言也有。 更实际一点,协程的代码是运行在线程中的,可以单线程中执行;也可以多线程中执行,即支持来回切换。...它的设计初衷就是为了解决并发问题,可以更方便地处理多线程协作的任务。 Kotlin 中,协程就是一个封装好的线程框架。...比如我 code 4 中 IO 线程的操作换成网络请求数据的逻辑,然后最后的打印的逻辑换成更新 UI 的代码,不就可以实现请求数据更新 UI 的逻辑了吗?...今天它的皮给扒了 https://rengwuxian.com/kotlin-coroutines-2/ ;Hugo(谢晨成) Kotlin 协程:简单理解 runBlocking, launch

1.4K30

如何看待 Kotlin 成为 Android 官方支持开发语言?

本文尝试从一个客观全面一点儿的角度来看待这件事情,尽力为大家提供一个比较理性的观点供参考。 为什么会选用Kotlin 关于 Google 为什么会选择 Kotlin认为有两方面的原因。...Kotlin的实用具体表现在 引入Object,便于我们更好的应用单例模式 引入data class, 避免了我们手写getter/setter/toString等方法 引入参数默认和具名参数,避免了不必要的方法重载...对个人而言,高阶函数和方法扩展这两特点着实真心受用。方法扩展会有一种创造感,这是Java种的Util方法所无法比拟的。...具体需要最好以下两点 选择合理范围内的最抽象类增加方法,比如我们想为Activity增加一个longToast,应该想一想是不是放在更加抽象的Context会更好一些 同时也不能为了便利,增加和当前类不相关的方法...决定Kotlin使用这么多语法糖的除了简洁,高效可读之外,还有一个原因,是因为kotlin编译生成的class文件是目标到JVM 6(基于JVM 6 是一种权衡后的结果),比如我们Kotlin中使用了

37720

Kotlin学习笔记(一)-数据类型

,如果理解的不对或是有疑问,真诚希望可以留言区大家进行讨论。...这个方法每次创建对象都会被执行 只有次构造器那么构造方法可以重载 形参可以方法中调用(如果val 声音: String去掉val这行会报错) java中所有类的父类是Object,Kotlin中所有类的父类是...空类型 Kotlin对函数有更严格的要求,如在Java中你可以写这样一个方法: public String getName() { return null; } 这样完全是没问题的...图片.png 会提示错误,意思说你不能返回一个空字符串 PS: 这里简单说下Kotlin方法的定义: fun 方法名(形参1,形参2):{...length) 定义value是可空类型,但是明确知道它不是null,那么我们可以使用value!!,表示已经确定知道这个不是null,不要给我报编译错误。

72510

31 天,从浅到深轻松学习 Kotlin

您甚至可以调用任意函数! Day 5:循环,范围表达式与解构 for 循环与其他两种 Kotlin 特性一起使用时可以获得超级能力:范围表达式和解构。...一个调用您生成一个新的 bundle,它甚至可以处理 Arrays。 Day 9:Parcelize 喜欢 Parcelable 的速度,但不喜欢写所有的代码?和 @Parcelize 打个招呼。...第三周 Day 15:sealed 类 Kotlin 的 sealed 类可以您轻松的处理错误数据,当结合 LiveData 您可以一个 LiveData 同时代表成功和失败的路径,这比用两不变量要好...kotlin 可以使您制定一个 inline 的方法 -- 这意味着调用将替换方法体,用很非常简单的方法来生成 lambda 的接口。 Day 20:运算符重载 用操作符重载快更快速写 Kotlin。...Android 上 Kotlin另一个 DSL 是 Anko。Anko 允许您使用声明性代码构建 Android 视图。

2.2K30

深入详解 Jetpack Compose | 优化 UI 构建

一个更为熟悉的可以您查看这一清单的方式是通过一些 API,例如 findViewByID。使用这些 API 需要对 XML 布局的形式和内容有一定了解。... Jetpack Compose 的世界中,由于我们使用函数替代了类型,因此实现组合的方法颇为不同,但相比于继承也拥有许多优点,让我们来看一个例子: 假设我们有一个视图,并且我们想要添加一个输入。...但是接下来挑战来了: 我们要创建一个日期范围的输入,这意味着需要验证两日期——开始和结束日期。您可以继承 DateInput,但是您无法执行两次,这便是继承的限制: 我们只能继承自一个父类。 ...封装 Compose 做的很好的另一个方面是 "封装"。...observeAsState 方法会把 LiveData 映射为 State,这意味着您可以函数体的范围使用其

1.3K20

Kotlin 初体验:主要特征与应用

本文选自《Kotlin实战》 Kotlin初体验 让我们从一个小例子开始,来看看 Kotlin 代码长什么样子。...其中最重要的概念是 Kotlin 对可空类型的支持,通过在编译期检测可能存在的 空指针异常,它可以写出更可靠的程序。 另一个 Kotlin 类型系统的新概念是对函数类型的支持。...函数式编程的核心概念如下: 头等函数——函数(一小段行为)当作使用,可以用变量保存它,它当作参数传递,或者当作其他函数的返回。...函数式风格的代码 比相应的命令式风格的代码更优雅、更简练,因为函数当作可以你获得更强大的抽象能力,从而避免重复代码。...另一个能用上Kotlin干净和简洁的DSL的用例是持久化框架。

83930

介绍Kotlin第一部分(翻译篇)

1、介绍Kotlin Kotlin是jvm新的开发语言。 谷歌推广Kotlin作为其基于java的Android平台上的第一类语言五月份。从那之后就纳闷:这是什么语言?...我们的第一个我们不返回任何东西,所以我们可以省略到类型,在这种情况下可以使用Unit。第二函数中,我们定义必须返回一个String,使用return语句。...可以省略或者留在原位,什么你更方便(经验法则:长的表达式,它放在后面。短的表达式,它可以省略)。 Kotlin还引入了可选的命名函数参数的概念。...中有很多方式可以创建类。...第二例子中使用step关键字,表示我们要从这个范围中取其它。第三例子循环列表,将listof打印出来。 总结 以上就是Kotlin语言的基本组成部分,有了这些你就可以使用Kotlin了。

63440

Kotlin之旅——类特性

与智能转换 Kotlin 中,用 is 来判断一个对象是否是某个类的实例,用 as 来做强。...Kotlin一个很好的特性,叫 智能转换(smart cast),之前的文章中也提到过。就是当已经确定一个对象的类型后,可以自动识别为这个类的对象,而不用再手动强。...如果你需要写一个可以无需用一个类的实例来调用、但需要访问类内部的函数(例如,工厂方法或单利),你可以它写成一个用 companion修饰的对象内的方法。...如果只是简单的写,直接用伴生对象返回一个 val 修饰的外部类对象就可以了,但是更多的时候我们希望类被调用的时候才去初始化他的对象。...这样一个场景,使用一个代理类实现所有需要获取信息的接口方法。然后不同的子类去实现所需的接口,请求统一交给代理类完成。

87220
领券