kotlin泛型类型变异】的更多相关文章

在java泛型中中会有 ? extends E 可以解决类似于List<String> 赋给List<Object>  的问题,但是在kotlin泛型中并没有提供通配符,而是out和in关键字,用out声明的泛型占位符只能在获取泛型类型赋值,如函数的返回值,用in声明的泛型占位符只能在设置泛型类型值得地方,如函数的参数. abstract class Source<out T>{ abstract fun nextT():T } fun demo (str:Source…
泛型,即 "参数化类型",将类型参数化,可以用在类,接口,方法上. 与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼. 声明一个泛型类: class Box<T>(t: T) { var value = t } 创建类的实例时我们需要指定类型参数: val box: Box<Int> = Box<Int>(1) // 或者 val box = Box(1) // 编译器会进行类型推断,1 类型 Int,所以编译器知…
开始阅读Kotlin官方文档.先上文档目录.有些内容还未阅读,有些目录标目翻译还需琢磨琢磨.后续再将具体内容的链接逐步加上. 文档链接:https://kotlinlang.org/docs/kotlin-docs.pdf 网页链接:https://kotlinlang.org/docs/reference/ 1. 入门1.1.基本语法1.1.1. 定义包1.1.2. 定义函数1.1.3. 定义局部变量1.1.4. 使用字符串模板1.1.5. 使用条件表达式1.1.6. 使用nullable值检…
Kotlin (0:00) 大家好,我是 Michael Pardo,今天我要给大家展示一下 Kotlin 这门语言,同时看看他如何让你在 Android 开发的时候更开心,更有效率. Kotlin 是一个基于 JVM 实现的静态语言.Kotlin 是 JetBrains 创造并在持续维护这门语言,对,就是那个创造了 Android Studio 和 IntelliJ 的公司. Kotlin 有几个核心的目标: 简约:帮你减少实现同一个功能的代码量. 易懂:让你的代码更容易阅读,同时易于理解.…
委托模式(Delegation) 类的委托 interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fun print() { print(x) } } class Derived(b: Base) : Base by b fun main(args: Array<String>) { val b = BaseImpl(10) Derived(b).print() // prints 10 } 这里…
作者:Antonio Leiva 时间:Feb 8, 2017 原文链接:https://antonioleiva.com/generic-functions-kotlin/ Kotlin的一些特性组合起来与泛型混合使用创建函数可以极大的简化你的编码,且保证它的可读性. 在Kotlin库中,有几个函数非常实用,一旦你掌握它们的概念使用起来就非常容易. with函数 尽管Kotlin标准库中有几个相似的函数,但是,我计划聚焦在with的各个部分上. 这个函数允许做什么?用了它,我们可以用一变量的代…
@JvmName: 扩展方法相关: 先来定义一个扩展方法: 好,接下来再来定义一个扩展函数: 此时报错了..看一下错误提示: 其中给的提示有点奇怪,第一个是很明显咱们的扩展函数木有接收参数嘛,为啥提示JVM签名是接收一个List参数呢?其实这里就涉及到了扩展函数的语义了,对于扩展函数来说,其实是将被扩展的那个类作为扩展函数的第一个参数传进去的,为啥呢?因为Java中是不支持扩展函数的:第二个咱们声明不是已经定义了不同的泛型嘛,为啥提示这俩方法签名冲突了呢?这里需要注意了在Java中的泛型其实是一…
继续还是探究协变与逆变,在正式开始之前,先来对Kotlin和Java的协变与逆变进行一个对比: 1.Kotlin是声明处协变:而在Java中是在使用处协变: 如何理解,我们先来回顾一下在Java使用协变的写法: 很显然是在我们使用的时候进行协变的,而在Kotlin中: 2.Kotlin中的out关键字叫做variance annotation,因为它是在类型参数声明处所指定的,因此我们称之为声明处协变(declaration-site variance):而对Java来说则是使用处协变(use-…
泛型的声明 与Java不同的是,Kotlin要求类型实参要么被显示的说明,要么能被编译器推导出来.因为Java在1.5版本才引入泛型,所以为了兼容过去的版本,可以不直接声明List类型的变量,而不说明类型. //下面两种是等价的 val readers = arrayListOf<String>() val readers:ArrayList<String>=arrayListOf() 泛型函数 // 第一处是类型形参声明,第二三处分别是接收者和返回类型使用了类型形参 fun &l…
引子 相信总是有很多同学,总是在抱怨泛型无论怎么学习,都只是停留在一个简单使用的水平,所以一直为此而备受苦恼. Kotlin 作为一门能和 Java 相互调用的语言,自然也支持泛型,不过 Kotlin 的新关键字 in 和 out 却总能绕晕一部分人,归根结底,还是因为 Java 的泛型基本功没有足够扎实. 很多同学总是会产生这些疑问: Kotlin 泛型和 Java 泛型到底有何区别? Java 泛型存在的意义到底是什么? Java 的类型擦除到底是指什么? Java 泛型的上界.下界.通配符…
数据类型 Kotlin跟 java 相同,基本数据类型有八种 boolean,char,int,short,long,float,double,byte 类型 位宽 最小值 最大值 Short 16 -32768 32767 Int 32 (-2^31) (2^31-1) Long 64 (-2^63) (2^63-1) Byte 8 -128 127 Float 32 - - Double 64 - - 根据数据类型,结合代码看下 // 如果变量是数字,kotlin 的数据类型默认就是 Int…
作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式函数,所以它是Kotlin和任何其他现代开发语言的最强工具之一. 在Java6中,我们仅能下面方法这样做:通过用单一方法声明接口,并用匿名对象实现那些接口. Lambda表达式特别是在Kotlin中能定义的方式,为我们开启无线可能的世界.在接下来的内容中,我们将了解这些用法. Kotlin的Lamb…
作者:Antonio Leiva 时间:Dec 27, 2016 原文链接:https://antonioleiva.com/custom-views-android-kotlin/ 在我们阅读有关class文章时,你可能记得通常情况下仅用一个构造函数.这对于要创建定制视图就是一个问题. Android框架希望有多个构造函数对应不同的创建视图位置和创建视图方法(通过代码.使用XML,设置主题,等等),这样我们就不能忽略这种情况. 为此,Kotlin团队提供了同一个类中有多个构造函数的能力,就如同…
作者:Antonio Leiva 时间:Dec 19, 2016 原文链接:https://antonioleiva.com/kotlin-integrations-android-sdk/ 使用Kotlin语言不仅仅简化你的代码,而且也可以简化从Kotlin调用Java代码. 这是怎样工作的?简单地使用一些通用结构就可以得到Kotlin的感觉. 在这篇文章中,你将看到一些例子,它是怎样提升相同代码.它也预防Java代码包含模板部分. Kotlin与Android SDK 集成 如Android…
作者:Antonio Leiva 时间:Dec 12, 2016 原文链接:http://antonioleiva.com/kotlin-android-extensions/ 你也许已厌倦日复一日使用findViewById编写Android视图.或是你可能放弃它转而使用著名的Butterknife库.那么你将会喜爱Kotlin的Android扩展. Kotlin的Android扩展 Kotlin的Android扩展是Kotlin插件的正规插件之一,它无缝覆盖Activities的视图,Fra…
作者:Antonio Leiva 时间:Dec 7, 2016 原文链接:http://antonioleiva.com/classes-kotlin/ Kotlin类尽可能简单,这样用较少的代码完成更多的逻辑. 我将快速展示怎样开始编写Kotlin类,它不同于Java类. 1.类声明 class Person 只需用保留字class 加 类名.如果类里没有代码,大括号"{}"都不需要. 说明:是否看见它没有用public修饰符吗?这是因为在Kotlin中所有都时默认为public.…
原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 2016 原文链接:http://antonioleiva.com/variables-kotlin/ Kotlin系列课程的第二课:Kotlin中变量不同于Java: var 对val. 在这第二章节中,我们将了解Kotlin中变量是怎样工作的,什么是val和var,什么时间使用它们. 我从这开始,是因…
原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:http://antonioleiva.com/create-first-android-project-kotlin/ 原文作者,开始Kotlin系列课程的第一课:用Kotlin创建第一个Android项目. 今天,我开始一组30篇针对Android开发者的Kotlin语言的论文(KAD).在这系列…
作者:Antonio Leiva 时间:Sep 12, 2016 原文链接:http://antonioleiva.com/recyclerview-diffutil-kotlin/ 如你所知,在[支持库24(the Support Library 24)]中包括一个新的.适用.方便的类:DiffUtil,这使你摆脱对单元改变和更新它们的无聊和易出错. 如果你还不了解它,可以阅读Nicola Despotoski的这篇好文章了解它.这篇文章解释怎样容易处理它. 实际上,Java语言引入许多模板,…
春节后,又重新“开张”.各位高手请继续支持.谢谢! 原文标题:Kotlin recipes for Android (I): OnGlobalLayoutListener 原文链接:http://antonioleiva.com/kotlin-ongloballayoutlistener/ 原文作者:Antonio Leiva(http://antonioleiva.com/about/) 原文发布:2016-03-16 ­ Android的Kotlin秘方(I):OnGlobalLayoutL…
网页链接:https://kotlinlang.org/docs/reference/basic-types.html 2.   基本概念 2.1.  基本类型 从可以在任何变量处理调用成员函数和属性角度来说,在Kotlin开发语言中,一切都是对象.有些类型是内嵌的,它们的实现进行过优化,用户看到的仍是原始类.在这节中,我们说明大部分这些类型:数字,字符,布尔和数组. 2.1.1.   数字 Kotlin开发语言处理数组的方法类似Java开发语言,但是也有差别.例如,没有隐含的数字扩宽的转换,并…
尝试kotlin的起因 因为各种原因(版权,人员招聘),公司的技术体系从c#转到了java,我花了大概两周的时间来上手java,发现java的语法还是非常简单的,基本看着代码就知道什么意思.学习java的过程中,大部分时间都花费在了maven配置,理解spring的ioc上面. 学习的一段时间,我对java的感觉也正如前人的总结,稀烂的语法,完美的生态.spring在更高层面去约束你的代码设计,测试,事物,分布式,lucene,hadoop...jvm世界有太多的财富等着我去挖掘.但,我实在是不…
引言 众所周知,java泛型最重要的特征是泛型擦除,所有泛型在编译时会转换成Object所以在java中运行时无法获得泛型的类型. 但是其实以上的规则是针对方法的内部变量的,如果是其他形式的泛型其实是可以获得内部类型的 类内部成员变量 public static void main(String[] arg) throws NoSuchFieldException, SecurityException{ Field f=Pojo.class.getField("list"); //反射…
网页链接:https://kotlinlang.org/docs/reference/basic-syntax.html 1.   入门 1.1.  基本语法 1.1.1.   定义包 包说明应该在源文件的顶部: package my.demo import java.util.* // … 并不要求包与目录匹配:源文件可以在文件系统中的任意地方. 查看:包(2.2) 1.1.2.   定义函数 函数带有Int类型参数,并返回Int类型值: fun sum(a: Int, b: Int): In…
原文标题:Converting Plaid to Kotlin: Lessons learned (Part 2) 原文链接:http://antonioleiva.com/plaid-kotlin-2/ 原文作者:Antonio Leiva(http://antonioleiva.com/about/) 原文发布:2015-11-17 我们在第一部分中所见的各种显著地改进,要归功于在Activity中使用了Kotlin语言.但是,由于主要是重载方法做些事情,仍然免不了一些公式化代码,所以这种类…
原文标题:Converting Plaid to Kotlin: Lessons learned (Part 1) 原文链接:http://antonioleiva.com/plaid-kotlin-1/ 原文作者:Antonio Leiva(http://antonioleiva.com/about/) 原文发布:2015-11-03 经常有人问我用Kotlin语言编写Android APP有哪些优点.可问题是我从来没有直接将用Java语言开发的Android APP转到Kotlin语言,所以…
原文标题:Functional Android (II): Collection operations in Kotlin 原文链接:http://antonioleiva.com/collection-operations-kotlin/ 原文作者:Antonio Leiva(http://antonioleiva.com/about/) 原文发布:2015-09-29 在简化代码方面,Lambda表达式是一个杰出的工具,而且还可以完成之前不可能完成的事.我们在这个系列文章的第一篇(Unlea…
原文标题:Unleash functional power on Android (I): Kotlin lambdas 原文链接:http://antonioleiva.com/operator-overloading-kotlin/ 原文作者:Antonio Leiva(http://antonioleiva.com/about/) 原文发布:2015-09-01 虽然Java 8中已包含一些函数式工具,且如你想象那样Android开发者还不能够立即(或许甚至根本不能)使用这些工具,但是如果…
原文标题:Functional operations over Views in ViewGroup using Kotlin 原文链接:http://antonioleiva.com/functional-operations-viewgroup-kotlin/ 原文作者:Antonio Leiva(http://antonioleiva.com/about/) 原文发布:2015-07-29 集合.迭代.数组.序列 ... 所有这些共用一套好用的函数,这组函数可帮助对它们的元素进行转换.排序…
原文标题:API request in Android the easy way using Kotlin 原文链接:http://antonioleiva.com/api-request-kotlin/ 原文作者:Antonio Leiva(http://antonioleiva.com/about/) 原文发布:2015-07-21 Kotlin是功能非常强大的编程语言,其目标是利用较少的模板(boilerplate)编写更多的代码.尤其是在Android开发中.除了编程语言自身和它的类之外…