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

Kotlin 详解

最近一段时间在网上发了一套 Kotlin 的入门视频,涵盖了基础语法、面向对象、高阶函数、DSL、协程等比较有特色的知识点,不过有朋友提出了疑问:这门课为什么不专门讲讲、反射注解呢?...真·伪· Java 的大家肯定都知道了,1.5 之后才加入的,可以为类方法分别定义参数,就像下面这样: public class Generics{    private T...逆变的情形正好相反,即不可以将参数作为方法的返回。...* 不允许作为函数变量的类型的参数! interface Foo class Bar : Foo // ERROR! * 不能直接作为父类的参数传入!...小结 通过上面的讨论,其实大家会发现 Kotlin相比 Java 有了更严格的约束,更简洁的表述,更灵活的配置,但背后的思路具体的实现总体来说是一致的。

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

kotlin--

kotlin作为一种高级语言,也提供了,它的比Java更为灵活 一、类 1.定义类 定义Java差不多 class Magic(_item: T) { var subOject...1.如果想要对传递的作约束,可以指定的父类 //指定父类 class Magic(_item: T) { var subOject: T = _item...age}") } 4.out out修饰,表示该对象可以赋值给父类 class Product(val product: T) { fun getItem(...Boy的父类Man man.cousume(Man("danny", 15)) } 结果: com.aruba.mykotlinapplication.Man@3cd1a2f1 而Java中只能使用对应的...,没有继承关系 6.reified kotlin也不允许对作类型检查,当我们想要知道参数具体是哪个类型时,可以使用reified关键字修饰 reified必须inline配合使用,原因是编译的时候

30610

Android面试题之Java Kotlin

,因为数组遵循协变原则 协变:Apple extend Fruit,Apple[] 的父类是Fruit[] ,继承子类 给定两种具体的类型 AB,无论AB是否相关,MyClassMyClass...都没有半毛钱关系; 比如Apple继承自Fruit,那PlatePlate也没有任何关系;也就是说苹果是水果,但装苹果的盘子不是装水果的盘子 继承关系中,可以有多个,但如果有一个参数是一样的..., Apple> 通配符 通配符让转型更灵活 Plate<?...,在Java运行时根本就不存在信息 2、Java编译器具体是如何擦除的 检查类型,获取目标类型 擦除类型变量,并替换为限定类型。...在必要时插入类型转换以保持类型安全 生成桥方法以在扩展时保持多态性 Kotlin Kotlin可以看文章:Android面试题之Kotlinreified关键字 END 点亮【赞和在看】

5910

Kotlin ① ( 类 | 参数 | 型函数 | 多参数 | 类型约束 )

, T 类型可以 作为函数的返回 ; 通常情况下 , 参数 都使用 T 表示 , 使用其它字母 或者 字符串 都可以表示 参数 , 但是 约定俗成 都使用 T 来表示 ; 代码示例 :...---- 函数 的 参数 或 返回 类型为 类型 , 则该函数称为 型函数 ; 代码示例 : 该代码中 , 型函数 logT 的 参数 返回 都是 T 参数 类型 ; class...Student(_item: T) { var item: T = _item // 型函数 参数 返回 都是 T 类型 fun logT(t: T): T{...---- 型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 的 参数返回 都是 的话 , 在该型函数 中可能需要使用多个 , 使用不同的字母表示不同的 ; 如果函数中 引入了新的类型...引入了新的类型 , 需要在 class 关键字 主构造函数 之前 , 使用 尖括号 注明 ; class Student(_item: T) { } 型函数 参数 声明 :

2.7K10

Kotlin :基本使用

Kotlin 中声明使用类、型函数的基本概念 Java 相似,有 Java 概念的情况下,不用详细解释或者做进一步了解,也能够很容易地上手使用。...Kotlin :基本使用Kotlin :类型参数约束系列持续更新中,欢迎关注订阅。为什么需要假如我们想实现自定义的列表类型,用于存放数值、字符串或其他具体的类型。...// 编译出错,类型不匹配机制允许我们在编码的时候,使用占位符作为类型(即「类型参数」代替实际使用时的类型(即「类型实参」)。如何区别上述两个概念?...定义类、型函数的方式如下:// --- 型函数 ---fun run(param: P) // 仅用于函数参数,定义在类、接口中fun run(): R // 仅用于函数返回...,定义在类、接口中fun invoke1(param: P): R // 用于函数参数返回,定义在类、接口中fun filter(predicate: (T)

1.7K30

Kotlin | 9.

本章内容包括: 声明型函数类 类型擦除实化类型参数 声明点变型使用点变型 9.1 类型参数 // 如果要创建一个空的列表,必须显示的指定,有的话可以被推导出来...Java一样,Kotlin在运行时也被擦除了。...会提示报错 // println(Validators[String::class].validate(42)) 总结 Kotlin Java 相当接近:它们使用同样的方式声明型函数类... Java 样,类型的类型实参只在编译期存在。 不能把带类型实参的类型 is 运算符一起使用 ,因为类型实参在运行时将被擦除。...变型是一种说明两种拥有相同基础类型不同类型参数的类型之间子类型化关系的方式,它说明了如果其中一个类型的类型参数是另一个的类型参数的子类型 这个类型就是另外一个类型的子类型或者超类型。

1.8K10

Kotlin变之路

通用类型:T,S,U,V 集合元素类型:E 映射键-类型:K,V 数值类型:N 要理解Kotlin,我们最好首先从Java的来学习,毕竟Kotlin的语法糖太多了,Java会更加白话文一点...所以编译器为了避免这种不确定性,就否定了TestTest是一种类型的推断。但是这种处理在我们处理业务时,会有很多限制,所以,提供了「变」来拓展的使用。...Kotlin让我们有了可以支持多种类型的能力,变让我们有了修改的能力,总结来说: 通配符<?...Kotlin官网上有个著名的——Consumer in, Producer out,说的就是这个意思。 Kotlin的优化 我们通过这个例子来看下Kotlin对Java的改进。...那么我们在实际的代码中,要在哪些场景使用协变逆变呢?通常来说,参数协变后则表示——「这个参数在当前类中,只能作为函数的返回,或者是只读属性」。

1.2K21

kotlin入门之

【码上开学】Kotlin 在学习kotlin 之前我们先来回顾一下关于Java的基础吧。 说道,我们可能最常用的就是在三大集合中去使用。... 将具体的类型化,编码的时候用符号来代类型,在使用时再确定他的类型。 因为的存在,我们可以省去强制类型转化。 是跟类型相关的,那么是不是也能使用与类型的多态呢?...super Button>,往里面添加 Button, 因此这种类型声明称之为「消费者 Consumer」。 小结下,Java 的本身是不支持协变逆变的。 可以使用通配符 ?...说完了Java的之后,我们在回头看一下kotlin中的kotlin 中的outin kotlinjava一样,kotlin中的本身也是不可变的。...伪:编译时擦除类型,运行时无实际类型生成 例如:java、kotlin:编译时生成真实类型,运行时也存在该类 例如:C#、C++ 我们知道JVM上的,一般是通过类型擦除来实现的

1.1K20

Kotlin基础之

Kotlin没有任何的通配符类型,它使用声明处变型类型投影两种方式替代。 通配符 - 使用问号表示的类型参数,表示未知类型的类型约束方法。 首先,先思考为什么Java需要这些难以理解的通配符。...此时安全地定义投影的,每个的具体实例都是的子类型。 为此,Kotlin提供称为星号投影的语法。 对于Foo,T为带有上界TUpper的协变量,Foo等价于Foo。...TUpper,Foo等价于Foo用于读取Foo用于写入。...val l = SingletonList(1) 约束 所有可以被指定类型参数替代的类型,都可以使用约束进行限制。...Cloneable { return list.filter{it -> threshold }.map { it.clone()} } 附:里氏替换原则协变与逆变中的协变逆变

94970

Kotlin :类型参数约束

上一篇文章讲了 Kotlin :基本使用,接下来我们再进一步了解使用相关的进阶知识。本篇是 Kotlin 类型参数约束的讲解,更多内容可点击链接查看。...Kotlin :基本使用Kotlin :类型参数约束系列持续更新中,欢迎关注订阅。...为什么需要类型参数约束在上一篇文章里,我们使用定义了一个列表List,使用这个列表,我们可以在使用的时候,实例化出各种具体类型的列表,比如字符串列表List、整型列表List...利用范约束实现非空范Kotlin 有一个为人称道的特性:不可空。但当我们使用范时,这个特性在不幸的失效了。...回过来说范。当我们定义一个范类/范型函数时,由于「类型参数」在被「类型实参」替换时可使用「可空类型」「非空类型」这两种类型,这会迫使我们在做具体实现要考虑可空类型,带来了不必要的复杂性。

2.1K31

Kotlin 进阶 知识详解

前言 详细介绍Kotlin中关于的知识。方便我们理解Kotlin中的使用。 如果对于知识不太了解,也可以通过本篇文章了解到底是什么,并且对我们开发到底有什么作用。...介绍 什么是?我们如果定义类接口等,针对传入的数据不确定类型的。统一叫做,通过来实现数据类型的动态化。 使用可以最大限度的重用代码,并且保护数据类型的安全以及提高性能。...我们可以在函数声明,属性声明,类声明接口声明中使用。下面也从这四个维度进行介绍Kotlin中的使用。 1.声明型函数 例如,我们声明一个比较函数。...在Kotlin中的定义java中其实很类似。都是使用来进行标注。 小知识:并不是必须用T字母来代替。...3.声明接口 其实接口这两个都差不多。我们了解接口类的创建其实本质差不了太多。 而我们声明的接口,其实最终还是落实在了类属性函数中了。

21730

Kotlin学习笔记(七)-

前言 这节我们说下Kotlin。...其实KotlinJava很相似。他们都是伪,所谓伪就是我们们是无法获取到的具体的类型的。以为Java存在类型擦除转换。...本篇还是反射一样,从实际代码编写角度,说下Kotlin 逆变与协变 的逆变与协变其其在Java中也有。简单概括来说就是实现了的协变,<?...Kotlin中的协变与逆变 参数即可作为传入的参数,也可以作为返回,但被inout关键字修饰后就不一样了 out 叫协变 只能作为返回读取 不能写入修改(Kotlin的list中只有get方法...list) 协变点:返回类型是类型参数 逆变点:入参类型是参数的类型 @UnsafeVariance 变点伪例(当时协变的时候 作为参数入参会报错 那么如果我们想忽略这个错误那么我就可以用这个注解标识

64520

接口,通配符

接口接口的定义,public interface man{...}。在接口名后面加上类型参数T,这样就定义了一个接口。 ?...,在类名后面加上类型参数T,这样就定义了一个类。 ? 接口不同,类有构造器,并且构造器也可以使用类型参数。...如果java里面没有继承这个特性,那么到这里就讲完了,但是,正因为java有继承这个特性,会导致很多其他的问题出现,其复杂程度会几何级的上升,后面的知识点对抽象能力思维能力有较高的要求,请做好战斗准备...2.再看另一个问题,如果父类是类型,如何定义子类? ? 类的子类 如果将一个类定义为类,那么在创建该类的子类的时候不能将子类直接继承该类,而是需要指定父类的类型。...在java中,不能继承实现。为什么?WHY?请手动滑动到本章最上面,跟我一起念,类型参数化。问题的关键就在这里,因为将类型作为一种参数,而参数是什么?

2.3K20

Java进阶:【】认识方法,类,接口通配符

什么是就相当于标签 形式: jdk1.5之后,用来解决元素类型不确定的数据保存操作, 例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做...,有缺点: 一般我们在使用的时候基本上往集合里随意放,因为底层是一个obj类型的数组,所以什么都能放,不方便管理。...对应的类型都是引用类型不能是基本类型 接口 声明类时传入类型实参 创建类对象时,传入类型实参 类型实参为空时,默认为Object类型 继承类: 1.父类不传入类型实参...,不是带的方法就是方法,方法有要求:这个方法的参数类型要和当前类的方法的无关 换个角度:方法对应的那个参数类型当前所在的这个类,是否为类,是啥,无关 方法定义的时候...并列关系,我们如何限制类型, 用extends的是本类类所有的子类:定义上限 用super是本类本类的父类,定义下限 List a = new ArrayList

3.4K10

Kotlin总结 ★ ( 类 | 参数 | 型函数 | 多参数 | 类型约束 | 可变参数结合 | out 协变 | in 逆变 | reified 检查参数类型 )

---- 函数 的 参数 或 返回 类型为 类型 , 则该函数称为 型函数 ; 代码示例 : 该代码中 , 型函数 logT 的 参数 返回 都是 T 参数 类型 ; class...Student(_item: T) { var item: T = _item // 型函数 参数 返回 都是 T 类型 fun logT(t: T): T{...八、 out 协变 ---- 使用 out 关键字 , 可以使 子类对象 赋值给 父类对象 ; 在 类 中 , 如果只将 类型 作为 函数的返回 类型 , 则在 声明 参数...子类对象 , ( 反之就会报错 ) 如果 使用 out 关键字 , 则 范围小的子类对象 赋值给 范围大的 父类对象 ; ( 反之就会报错 ) 使用了 out 协变 in...在 Java 中 , 运行时 不知道 参数 的 具体类型 ; 在 Kotlin 中可以 通过 reified 关键字检查 参数类型 ; Java 中如果想要知道 参数 具体类型 , 通过常规的方法无法实现

3.8K10

kotlin修炼指南7之

Kotlin在Java的基础上,同样对语法进行了拓展,所以很多Kotlin开发者,看着源码中的一堆in、out*,感觉非常不知所措。...其实,只要了解了Java,那么Kotlin就迎刃而解了。 首先,我们来想想,我们为什么需要。...上面就是一个比较简单的的使用实例。 不变性 FatherSon都可以作为子类,加入到Person的List中,这就是,但是让我们再看下下面的代码。...❝不管是如何变,它们的作用都是扩大参数的类型范围。 ❞ 协变 的协变,是变的一种方式。 协变的使用很简单,我们给参数加上out前缀即可,代码如下。...,另一种是将作为返回,这两种模式,实际上就对应「生产者-消费者」模型。

62730
领券