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

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

, 主构造函数之前 , 该参数 T 是 类型占位符 , 在 该中 可以使用 类型占位符 T 作为一个 使用 , 可以 定义 T 类型成员属性 主构造函数中可以接收 T 类型实例对象作为参数..., T 类型可以 作为函数返回值 ; 通常情况下 , 参数 都使用 T 表示 , 使用其它字母 或者 字符串 都可以表示 参数 , 但是 约定俗成 都使用 T 来表示 ; 代码示例 :...下面的代码中 , 声明了 Student , 该 接收 T 类型参数 , 在主构造函数中接收 T 类型参数 , 在该中声明了 T 类型成员属性 ; class Student..., 需要两个参数来表示其类型 ; T 类型中注明 , 可以在该 Student 中随意使用 , 但是 参数 R 是首次在该函数中使用 , 因此需要在该函数 fun 关键字...R 类型是 Boolean 类型 ; 3.14 true 五、类型约束 ---- 在 , 函数 中 , 使用前 , 需要声明 参数 : 参数 声明 : 如果类中

2.7K10

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

放在 尖括号 中 , 该参数放在 名后 , 主构造函数之前 , 该参数 T 是 类型占位符 , 在 该中 可以使用 类型占位符 T 作为一个 使用 , 可以 定义 T 类型成员属性...主构造函数中可以接收 T 类型实例对象作为参数 , T 类型可以 作为函数返回值 ; 通常情况下 , 参数 都使用 T 表示 , 使用其它字母 或者 字符串 都可以表示 参数 , 但是 约定俗成...八、 out 协变 ---- 使用 out 关键字 , 可以使 子类对象 赋值给 父对象 ; 在 中 , 如果只将 类型 作为 函数返回值 类型 , 则在 声明 参数...子类对象 ; 在 中 , 如果只将 类型 作为 函数参数 类型 , 则在 声明 参数 类型 时 , 在 参数 前 使用 in 关键字 , 同时 该 又称为 消费...(t: T) } 十、 invariant 不变 ---- 在 中 , 如果 既将 类型 作为 函数参数 类型 , 又将 类型 作为 函数返回值 类型 , 则在 声明 参数

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

Kotlin 类型参数约束

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

2.1K31

Kotlin函数 ⑧ ( 函数引用 作为函数参数 | ::函数名 | 函数类型 作为函数返回值类型 )

文章目录 一、函数引用作为函数参数 二、函数类型作为函数返回值 一、函数引用作为函数参数 ---- 函数 作为参数 , 有两种方式 : 传递 Lambda 表达式 , 也就是 匿名函数 作为参数值 ;...传递 函数引用 作为参数值 ; 函数引用 可以将 具名函数 转为 函数参数值 , 只要可以使用 Lambda 表达式 参数地方 , 就可以使用 函数引用 进行替代 ; 函数引用格式 : 两个冒号..., 匿名函数 没有函数名 ; 代码示例 : 在下面的代码中 , 首先使用 actionFun 函数类型变量 作为 studentDoSomething 函数参数 , 该变量值是一个 匿名函数 Lambda...与 使用 函数引用 作为参数 , 其效果是相同 ; fun main() { // 定义函数类型变量, 之后作为函数参数传递给函数 // 该匿名函数变量, 可以作为参数 val...---- 函数 返回值类型 , 也可以是 函数类型 ; 也就是说 匿名函数 , Lambda 表达式 可以作为 函数返回值 ; 代码示例 : 下面的代码中 , returnFun 函数返回值

2.6K10

Kotlin 类型擦除

Java 优点 是 Java 5 重要特性之一。本质是参数类型,也就是说所操作数据类型被指定为一个参数。...这种参数类型可以用在、接口和方法创建中,分别称为接口、方法。...例如,对于扩展函数涉及到,需要指定参数: fun T.longClick(block: (T) -> Boolean) = setOnLongClickListener...Kotlin 如何获得声明类型 跟 Java 一样,Kotlin 也是通过类型擦除支持。 但是 Kotlin 数组支持,因此它们并不会协变。...; class [Ljava.lang.String; 4.2 实例化类型参数代替引用 再举一个 Kotlin 使用 Gson 反序列化例子,可以使用实例化类型参数 T::class.java inline

1.7K30

方法、类型通配符使用

方法、类型通配符使用 一.        声明和非声明类似,除了在名后面添加了类型参数声明部分...和方法一样,类型参数声明部分也包含一个或多个类型参数参数间用逗号隔开。一个参数,也被称为一个类型变量,是用于指定一个类型名称标识符。...因为他们接受一个或多个参数,这些被称为参数参数类型。...每一个类型参数声明部分包含一个或多个类型参数参数间用逗号隔开。一个参数,也被称为一个类型变量,是用于指定一个类型名称标识符。...类型参数能被用来声明返回值类型,并且能作为方法得到实际参数类型占位符。 方法体声明和其他方法一样。

3.8K40

【Flutter】Dart ( | 方法 | 特定类型约束 )

接口 , 方法 提供复用性 , 支持类型不确定数据类型 ; : 提高代码复用程度 ; 方法 : 参数或返回值有类型约束 , 参数或返回值类型必须符合对应类型 , 使用时会进行类型检查约束...创建对象 , 类型设置为 String 类型 Cache cache = Cache(); // 调用方法时 , 传入参数必须符合对应类型...){ // 创建对象 , 类型设置为 String 类型 Cache cache = Cache(); // 调用方法时 , 传入参数必须符合对应类型.../ 创建对象 , 类型设置为 int 类型 Cache cache2 = Cache(); // 调用方法时 , 传入参数必须符合对应类型 //...int _grade; String school; String city; String address; /// 父构造函数调用 : 如果父有非空参数构造函数, 子类必须实现相同参数构造函数

4.8K00

Go 类型参数

但 Go 方案实质是对类型参数(type parameter)支持,包括: 函数(generic function):带有类型参数函数类型(generic type):带有类型参数自定义类型...](5, s) //ok foo[int,](5, s) //ok 那么,除了函数参数列表中参数类型可以作为类型实参推断依据外,函数返回值类型是否也可以呢?...([]int{11, 12, 14, -36,27, 0}) // 复用第一次调用后生成原型为func([]int) int函数 好了,接下来我们再来看 Go 对类型参数另一支持:带有类型参数自定义类型...和函数一样,类型可以有多个类型参数类型参数名通常是首字母大写,这些类型参数也必须是具名,且命名唯一。...,我们也可以将其他类型实例化后类型作为成员。

16610

【C++】编程 ⑦ ( 模板常用用法 | 模板声明 | 模板调用 | 模板作为函数参数 )

首先 , 要进行 具体类型 初始化 , 该操作就是在 模板 后面的 尖括号中 , 注明 类型 ; MyClass 此时 , 注明 类型后 , 就会生成 具体 ; 然后 , 使用...具体 , 定义 具体 变量 ; MyClass myInt(10); 3、模板做函数参数 模板 作为函数参数 , 形参 必须是具体类型 , 也就是 模板 类型必须声注明 ;...下面的 fun 函数中 , 接收模板作为参数 , 模板 类型 需要被注明 ; // 模板对象作为函数参数 // 形参必须是具体类型 // 模板类型必须声注明 void fun(MyClass...这个可以接受一个类型参数T , 并创建一个具有该类型成员变量对象 ; MyClass是一个模板 , 该模板 接受一个 类型参数T , 类型参数 T 在许多地方都会用到 , 在体中定义了一个...T 类型成员变量 value , 以及一个接受T类型参数构造函数 , 在printValue函数中 , 打印 value 值 ; template 是模板声明 , 告诉编译器我们将在后面定义一个模板

4600

【C++】编程 ⑦ ( 模板常用用法 | 模板声明 | 模板调用 | 模板作为函数参数 )

首先 , 要进行 具体类型 初始化 , 该操作就是在 模板 后面的 尖括号中 , 注明 类型 ; MyClass 此时 , 注明 类型后 , 就会生成 具体 ; 然后 , 使用...具体 , 定义 具体 变量 ; MyClass myInt(10); 3、模板做函数参数 模板 作为函数参数 , 形参 必须是具体类型 , 也就是 模板 类型必须声注明 ;...下面的 fun 函数中 , 接收模板作为参数 , 模板 类型 需要被注明 ; // 模板对象作为函数参数 // 形参必须是具体类型 // 模板类型必须声注明 void fun(MyClass...这个可以接受一个类型参数T , 并创建一个具有该类型成员变量对象 ; MyClass是一个模板 , 该模板 接受一个 类型参数T , 类型参数 T 在许多地方都会用到 , 在体中定义了一个...T 类型成员变量 value , 以及一个接受T类型参数构造函数 , 在printValue函数中 , 打印 value 值 ; template 是模板声明 , 告诉编译器我们将在后面定义一个模板

27840

Kotlin ③ ( out 协变 | in 逆变 | invariant 不变 | 逆变协变代码示例 | 使用 reified 关键字检查参数类型 )

作为 函数返回值 类型 , 则在 声明 参数 类型 时 , 在 参数 前 使用 out 关键字 , 同时 该 又称为 生产 ( 生产接口 ) , 用于生产 指定对象...- 使用 in 关键字 , 可以使 父对象 赋值给 子类对象 ; 在 中 , 如果只将 类型 作为 函数参数 类型 , 则在 声明 参数 类型 时 , 在 参数 前...使用 in 关键字 , 同时 该 又称为 消费 ( 消费接口 ) , 用于消费 指定对象 ; 代码示例 : 在下面的接口中 , 类型 只用于作为参数 ; interface...Consumer { fun consume(t: T) } 三、 invariant 不变 ---- 在 中 , 如果 既将 类型 作为 函数参数 类型 , 又将...类型 作为 函数返回值 类型 , 则在 声明 参数 类型 时 , 既不使用 in 关键字 , 又不使用 out 关键字 ; 代码示例 : 在下面的接口中 , 类型 即用于作为 返回值 ,

1.6K10

Kotlin变之路

kotlin修炼指南7之 ,是为了让「」、「接口」、「方法」具有更加通用使用范围而诞生,举个例子,假如我们不使用,那么一个List中可以装得下任何对象,这么做问题就在于,在使用时,需要对类型进行检查...但是这种处理在我们处理业务时,会有很多限制,所以,提供了「变」来拓展使用。 协变 协变指的是,当参数具有父子关系时,子类可以作为参数传递,而上界就是其父。...所以,经过协变之后,就失去了写入能力,它只能用于向外提供数据,也就是「数据生产者Producer」。 逆变 逆变指的是,父可以作为参数传递,但子类必须是其下界。逆变通过下界通配符<?...那么我们在实际代码中,要在哪些场景使用协变和逆变呢?通常来说,参数协变后则表示——「这个参数在当前中,只能作为函数返回值,或者是只读属性」。...「只能作为函数参数,或者修饰可变属性」。

1.2K21

【Java 简介 ( | 方法 | 静态方法 | 方法完整示例 )

也可以有参数 , 将 类型 作为 参数 传入中 ; 接口 : 接口 参数 , 也可以是 ; 将 类型 传入 方法 , , 接口 中 , 可以 动态地 指定一些类型 ;...; 其中 参数 , 返回值 类型是 T , 但 这个 T 是作为一个正常类型使用 , 并不是声明在 方法 中 ; 如果 , 接口 , 方法 是 , 接口 , 方法 , 则该..., 与 参数类型 T , 返回值类型 T , 方法内部 T , 都是同一个类型 ; /** * * 该 T 类型作为参数使用 * T 是参数类型 , 可以由外部传入 *...---- 静态方法 : 如果静态方法中 使用了 T , 作为参数 或 返回值 , 这种使用时错误 ; 如果必须在 静态方法 中使用 T , 则该 T 必须是静态方法 ,...不能是 ; 错误用法 : 正确用法 : 五、方法完整示例 ---- /** * * 该 T 类型作为参数使用 * T 是参数类型 , 可以由外部传入

13.6K30

From Java To Kotlin 2:Kotlin 类型系统与终于懂了

当 Nothing 类型作为函数参数时,一个有趣现象就出现了: ```kotlin // 这是一个无法调用函数,因为找不到合适参数 fun show(msg: Nothing) {} show(...- 当 Nothing 作为函数参数时,就意味着这个**函数永远无法被正常调用**。这在星投影时候是有一定应用。 - Nothing 可以看作是 Nothing?...### 接口/类型) 定义类型,是在类型名之后、主构造函数之前用尖括号括起大写字母类型参数指定: ### 声明接口 > Java: ``` //接口 interface...= tClass.newInstance() return t } ``` ### 约束 Java 中可以通过有界类型参数来限制参数类型边界,Kotlin约束也可以限制参数类型上界...in位置,而函数返回类型叫作out位置 #### 协变 :保留子类型化关系 如果在定义方法参数前面加上out关键词,说明这个方法是协变,简单来说类型A是类型B类型

42450

TypeScript中函数接口,约束,一文读懂

定义函数或方法是的参数是形参,调用此函数或方法时传递参数值是实参。 一般用来处理多个不同类型参数方法。就是在方法中传入通用数据类型,使多个方法合并成一个。...可以将类型参数化 好处:达到代码复用、提高代码通用性目的。 将类型由原来具体类型变成一种类型参数,然后在调用时才传入具体类型作为参数,调用时传入类型称为类型实参。...方法同时具备 通用性、类型安全和性能 ,是非和非方法无法具备 优势:高性能变成方式、达到代码复用、提高代码通用性、 使用类型参数(变量),它是一种特殊变量,代表类型而不是值...,参数n:类型):返回类型 { //函数体 } 定义 class 名{ //属性和方法签名} class 类型{ //属性和方法签名 } 接口定义...T 必须放在中间 一般不能单独出现,会出现在 函数、 接口 、中 ,在函数体内,编译器不知道变量T具体数据类型,只能认为其为 任意值(any) 类型 约束 参数T类似于any类型

2K30

初探 TypeScript函数基本类型接口内置对象

是一种特殊变量,只用于表示类型而不是值 函数 function identity(arg:T):T { return arg; } let output = identity(arg:T):T} = identity 复制代码 可以使用带有调用签名对象字面量来定义函数,我们可以将对象字面量拿出来作为一个接口,将一个参数当做整个接口一个参数...:T):T { return arg } let myIdentity:GenericIdentityFn = identity 复制代码 (=>学习) 看上去和接口差不多,使用...new GeneriNumber() 复制代码 有两个部分:静态部分和实例部分,实例部分,所以静态属性不能使用这个类型,定义接口来描述约束条件 约束 interface...;他有一个调用签名,参数列表和返回值类型函数定义,参数列表里每一个参数都需要名字和类型函数参数名不需要与接口里定义名字相匹配,如果你没有指定参数类型,TypeScript 类型系统会推断出参数类型

7.3K31

C#中类型参数约束)

因为我们数组中存储元素类型是不确定,所以这里我们用到了,其中where T : strut子句约束参数类型T必须为值类型。当然这个程序我们不使用,直接定义Object类型数组也可以。...下面重点说说C#中类型参数约束: 在定义时,可以对客户端代码能够在实例化时用于类型参数类型种类施加限制。 如果客户端代码尝试使用某个约束所不允许类型来实例化,则会产生编译时错误。...T:new() 类型参数必须具有无参数公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。 T: 类型参数必须是指定或派生自指定。...T: 类型参数必须是指定接口或实现指定接口。 可以指定多个接口约束。 约束接口也可以是。 T:U 为 T 提供类型参数必须是为 U 提供参数或派生自为 U 提供参数。...于是,我想能不能写一个简单,其中里面实现对数值类型加减乘除四则运算,遇到问题是 :where子句后面的约束怎么写,我查看数值Int32等等,它们是Object,如果直接定义一个参数

3.6K60
领券