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

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

下面的代码中 , 声明了 Student 类 , 该类 接收 T 类型参数 , 在主构造函数中接收 T 类型参数 , 在该类中声明了 T 类型成员属性 ; class Student...---- 函数 参数 或 返回值 类型为 类型 , 则该函数称为 函数 ; 代码示例 : 该代码中 , 函数 logT 参数 和 返回值 都是 T 参数 类型 ; class...---- 函数 中 如果涉及到 匿名函数 参数 , 匿名函数 参数返回值 都是 的话 , 在该函数 中可能需要使用多个 , 使用不同字母表示不同 ; 如果函数中 引入了新类型..., 需要两个参数来表示其类型 ; T 类型在类中注明 , 可以在该类 Student 中随意使用 , 但是 参数 R 是首次在该函数中使用 , 因此需要在该函数 fun 关键字...R 类型是 Boolean 类型 ; 3.14 true 五、类型约束 ---- 在 类 , 函数 中 , 使用前 , 需要声明 参数 : 参数 声明 : 如果类中

2.6K10

Kotlin 详解

最近一段时间在网上发了一套 Kotlin 入门视频,涵盖了基础语法、面向对象、高阶函数、DSL、协程等比较有特色知识点,不过有朋友提出了疑问:这门课为什么不专门讲讲、反射和注解呢?...所以我想说是,这东西,只要你对 Java 有一定认识,Kotlin 基本可以直接用。那我们这篇文章要干嘛呢?只是做一个简单介绍啦,都很好理解。 1....在 Kotlin 当中有一个关键字叫做 reified,还有一个叫做 inline,后者可以将函数定义为内联函数,前者可以将内联函数参数当做真实类型使用,我们先来看例子: inline fun...= List::class.java Kotlin 可以根据 * 所指代参数进行相应映射,下面是官方说法: 对于 Foo ,其中 T 是一个具有上界 TUpper 协变类型参数...* 不允许作为函数和变量类型参数! interface Foo class Bar : Foo // ERROR! * 不能直接作为父类参数传入!

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

Kotlin变之路

kotlin修炼指南7之 ,是为了让「类」、「接口」、「方法」具有更加通用使用范围而诞生,举个例子,假如我们不使用,那么一个List中可以装得下任何对象,这么做问题就在于,在使用时,需要对类型进行检查...通用类型:T,S,U,V 集合元素类型:E 映射键-值类型:K,V 数值类型:N 要理解Kotlin,我们最好首先从Java来学习,毕竟Kotlin语法糖太多了,Java会更加白话文一点...首先,Java中具有「不变性」,也就是说,编译器会认为List和List是两个完全不同类型,当然,不仅仅是List,比如下面这个例子。...但是这种处理在我们处理业务时,会有很多限制,所以,提供了「变」来拓展使用。 协变 协变指的是,当参数具有父子关系时,子类可以作为参数传递,而上界就是其父类。...Kotlin让我们有了可以支持多种类型能力,变让我们有了修改能力,总结来说: 通配符<?

1.2K21

转向Kotlin——

无论是Java还是Kotlin都是一个非常重要概念,简单应用很容易理解,不过也有理解起来麻烦时候。一起来认识一下。...基础 在了解Kotlin之前,先来看看Java中: 举个栗子:在JDK中,有一类列表对象,这些对象对应类都实现了List接口。...KotlinKotlin并没有提供通配符,取而代之是out和in关键字。用out声明占位符只能在获取类型值得地方,如函数返回值。...函数 不仅类可以有参数,函数一样可以有参数。参数放在函数名称之前。...小结 Kotlin是在Java基础上进行了改进,变得更好用,更安全,尽管上述技术不一定都用得上,但对于全面了解Kotlin会起到很大作用。

91520

kotlin--

kotlin作为一种高级语言,也提供了,它比Java更为灵活 一、类 1.定义类 定义类和Java差不多 class Magic(_item: T) { var subOject...1.参数也可以用于函数 class Magic(_item: T) { var subOject: T = _item var available: Boolean = false...val magic = Magic(Boy("danny", 15)) magic.available = true println(magic.getItem()) } 2.多个参数函数...1.如果想要对传递作约束,可以指定父类 //指定父类 class Magic(_item: T) { var subOject: T = _item...: com.aruba.mykotlinapplication.Man@3cd1a2f1 而Java中只能使用对应,没有继承关系 6.reified kotlin也不允许对作类型检查,当我们想要知道参数具体是哪个类型时

29610

Kotlin :基本使用

Kotlin 中声明和使用类、函数基本概念和 Java 相似,有 Java 概念情况下,不用详细解释或者做进一步了解,也能够很容易地上手使用。...但使用仅仅是第一步,要想将应用好,仍然需要做进一步深入学习。本篇是 Kotlin 基础介绍,进阶内容可点击链接查看。...Kotlin :基本使用Kotlin :类型参数约束系列持续更新中,欢迎关注订阅。为什么需要假如我们想实现自定义列表类型,用于存放数值、字符串或其他具体类型。...如果没有,我们只能针对每种具体类型,分别定义对应列表,这种方式只能针对有限具体类型进行实现、不同具体类型列表实际上具有相似的实现,这些代码只能在不同列表间拷贝重复,无法复用,难以维护。...下一篇文章,将介绍 Kotlin 进阶知识:类型参数约束

1.7K30

Kotlin | 9.

本章内容包括: 声明函数和类 类型擦除和实化类型参数 声明点变型和使用点变型 9.1 类型参数 // 如果要创建一个空列表,必须显示指定,有值的话可以被推导出来...和Java一样,Kotlin在运行时也被擦除了。...会提示报错 // println(Validators[String::class].validate(42)) 总结 Kotlin 和 Java 相当接近:它们使用同样方式声明函数类...变型是一种说明两种拥有相同基础类型和不同类型参数类型之间子类型化关系方式,它说明了如果其中一个类型类型参数是另一个类型参数子类型 这个类型就是另外一个类型子类型或者超类型。...在Kotlin 中既可以为整个类指定变型(声明点变型),也可以为类型特定使用指定变型(使用点变型)。 当确切类型实参是未知或者不重要时候,可以使用星号投影语法。

1.8K10

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

---- 函数 参数 或 返回值 类型为 类型 , 则该函数称为 函数 ; 代码示例 : 该代码中 , 函数 logT 参数 和 返回值 都是 T 参数 类型 ; class...---- 函数 中 如果涉及到 匿名函数 参数 , 匿名函数 参数返回值 都是 的话 , 在该函数 中可能需要使用多个 , 使用不同字母表示不同 ; 如果函数中 引入了新类型...(t: T) } 十、 invariant 不变 ---- 在 类 中 , 如果 既将 类型 作为 函数参数 类型 , 又将 类型 作为 函数返回值 类型 , 则在 声明 参数...// FastFoodFactory 是 Producer 子类 // Producer 参数 FastFood 是 Food 子类 // 在 Kotlin...在 Java 中 , 运行时 不知道 参数 具体类型 ; 在 Kotlin 中可以 通过 reified 关键字检查 参数类型 ; Java 中如果想要知道 参数 具体类型 , 通过常规方法无法实现

3.7K10

Kotlin 之类型擦除

Kotlin Kotlin 基于 Java 6,因此 Kotlin 天生支持。但是 Kotlin 有自己特点。...例如,对于扩展函数涉及到类,需要指定参数: fun T.longClick(block: (T) -> Boolean) = setOnLongClickListener...因为,Java 数组是协变,所以 Java 数组不支持。 协变是在计算机科学中,描述具有父/子型别关系多个型别通过型别构造器、构造出多个复杂型别之间是否有父/子型别关系用语。 四....Kotlin 如何获得声明类型 跟 Java 一样,Kotlin 也是通过类型擦除支持。 但是 Kotlin 数组支持,因此它们并不会协变。...Kotlin 远不止这些,后续文章会进一步介绍协变和逆变。

1.7K30

Kotlin :类型参数约束

上一篇文章讲了 Kotlin :基本使用,接下来我们再进一步了解使用相关进阶知识。本篇是 Kotlin 类型参数约束讲解,更多内容可点击链接查看。...Kotlin :基本使用Kotlin :类型参数约束系列持续更新中,欢迎关注订阅。...什么是类型参数约束对于上述场景,最理想实现应该满足这些条件:只有数值类型列表才能调用这个拓展函数拓展函数对「类型参数」所具备特征有必要了解,如知道它是一个Number类型因此,我们需要使用参数约束...,能知道传入对象上具有compareTo方法,可以使用这个方法进行比较由于Person类实现了Comparable接口,因此可以作为参数传入max函数但因为Any类没有实现Comparable...中属性也同样变得可空,这使得类在具体实现时候,需要考虑参数为空情况,也让编写代码具体实现变得复杂。

2.1K31

Kotlin 进阶 知识详解

前言 详细介绍Kotlin中关于知识。方便我们理解Kotlin使用。 如果对于知识不太了解,也可以通过本篇文章了解到底是什么,并且对我们开发到底有什么作用。...我们可以在函数声明,属性声明,类声明和接口声明中使用。下面也从这四个维度进行介绍Kotlin使用。 1.声明函数 例如,我们声明一个比较函数。...在Kotlin定义和java中其实很类似。都是使用来进行标注。 小知识:并不是必须用T字母来代替。...我们默认没有定义类型其实就是省略了:Any类型而已。 2. 声明属性 我们在上面的示例中了解了定义,在函数使用。下面我们介绍在类属性中声明和使用。...3.声明类和接口 其实类和接口这两个都差不多。我们了解接口和类创建其实本质差不了太多。 而我们声明类和接口,其实最终还是落实在了类属性和函数中了。

18430

Android面试题之Java Kotlin

,调用时候会进行类型强转,转为T限制类型 擦除后,字节码中没有信息了,但是类常量池里保留了信息。...反射时候提供了一套API可以拿到,比如getGenericType() 带来问题 类型变量不能使用基本类型 比如没有ArrayList,只有ArrayList,当擦除后...信息String不存在了 在静态方法和静态类中问题 因为类中参数实例化是在定义类型对象时候指定,而静态成员是不需要使用对象来调用,所有对象都没创建,无法确定参数; 静态方法中是可以...Java是JDK5新引入特性,为了向下兼容,虚拟机其实不支持,所以Java实现是伪机制,也就是说Java在编译期擦除了所有的信息,这样Java就不需要产生新类型到字节码,所有的类型最终都是一种原始类型...在必要时插入类型转换以保持类型安全 生成桥方法以在扩展时保持多态性 Kotlin Kotlin可以看文章:Android面试题之Kotlin和reified关键字 END 点亮【赞和在看】

5410

深入理解Kotlin系统

是静态类型语言中不可缺少一部分,Kotlin 定义和使用都类似 Java,但也有一些基于工程实践考虑优化和改进。...其中最重要类型和方法,Kotlin 系统继承了 Java 系统,同时添加了一些强化地方。...但是在调用者看来,却是实实在在固定类型,所以这里借助 Kotlin 内联函数 inline 可以实化参数,在 Kotlin 中只需要这样: fun <T someFunction() {...「*」投影 因为 Kotlin 源码中不允许忽略参数,所以在一些不重要地方,就不可避免使用 来表示。...总结 以上就是这篇文章全部内容了,希望本文内容对大家学习或者工作具有一定参考学习价值,如果有疑问大家可以留言交流,谢谢大家对ZaLou.Cn支持。

1.1K10

kotlin修炼指南7之

Kotlin在Java基础上,同样对语法进行了拓展,所以很多Kotlin开发者,看着源码中一堆in、out和*,感觉非常不知所措。...其实,只要了解了Java,那么Kotlin就迎刃而解了。 首先,我们来想想,我们为什么需要。...变 正是由于存在不变性,所以我们在支持某些场景参数时,就需要通过「变」来拓展「不变性」。...Kotlin,或者说Java,实际上是一种伪,即只在申明时检查是否有效,在编译时,类型会被擦除,这是因为Java历史原因所导致,由于它为了兼容没有老Java版本,从而做出妥协...函数必须是内联函数,因为只有内联函数才会在编译时进行替换 加上reified关键字让编译器在该使用时进行实例化 在实战中,我们就可以利用来进一步简化代码,例如: inline fun <reified

62130
领券