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

返回子类类型函数写法

不过由于我们这个 Event 类型比较多,因此希望写一个,来一个子类感受下: class DisposableEventBuilder : EventBuilder() { private....build() 我们调用完 retryLimit 方法后,想要设置下 delay,结果发现没有这个方法。 “我 X,这什么玩意儿”,你嘟囔了一句。 因为返回,所以链式调用掉链子了。...Kotlin 解法 Kotlin 倒也不是没有办法解决这个问题,用下泛型就好了: abstract class EventBuilder>() { protected...,这个参数则必须是当前子类,那么这样的话我们就可以在返回自身类型位置返回 T 这个类型了。...子类改动就很简单了,只需要给加一个泛型参数为自己类型即可: class DisposableEventBuilder : EventBuilder

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

JDK8-JDK17新特性(var类型推断、模式匹配、Record、密封

();不适用场景声明一个成员变量声明一个数组变量,并为数组静态初始化(省略new情况下)方法返回类型方法参数类型没有初始化方法内局部变量声明作为catch块异常类型Lambda表达式函数式接口类型方法引用函数式接口类型代码举例...为了保持兼容性,case 条件语句中依然可以使用字符: ,但是同一个 switch 结构里不能混用-> 和: ,否则编译错误。...这意味着,switch表达式(返回值)应该使用yield,switch语句(返回值)应该使用break。...1.8 密封背景:在 Java 如果想让一个不能被继承和修改,这时我们应该使用 final 关键字对进行修饰。...JDK15预览特性:通过密封和接口来限制超使用,密封和接口限制其它可能继承或实现它们其它或接口。具体使用:使用修饰符sealed,可以将一个声明为密封

2.3K11

【C++】继承 ⑥ ( 继承构造函数和析构函数 | 类型兼容性原则 | 指针 指向 子类对象 | 使用 子类对象 为 对象 进行初始化 )

一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 : C++ " 类型兼容性原则 “ 又称为 ” 赋值兼容性原则 " ; 子类代替父 : 需要 基 ( ) 对象..." 私有继承 " 派生 , 是 不具有 基 完整功能 , 因为 最终继承 后派生 , 无法外部调用 公有成员 和 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则...子类对象 , 指针 值为 子类对象 在 堆内存 地址 , 也就是 将 子类对象 地址 赋值给 类型指针 ; 引用 : 引用 引用 子类对象 , 将 子类对象 赋值给 类型引用 ; 二...类型兼容性原则 : 指针 指向 子类对象 Parent* p_parent2 = NULL; p_parent2 = &child; 该原则应用场景如下 : 定义函数 , 接收 指针...类型兼容性原则 : 指针 指向 子类对象 Parent* p_parent2 = NULL; p_parent2 = &child; // 通过指针调用函数

21020

Kotlin 1.4.30-M1 增强内联是个什么东西?

内联语法其实也简单,与 Kotlin 当中其他枚举密封、数据定义方式类似,在 class 前面加一个 inline 即可: inline class PlayerState(val value...直接定义肯定是不行,因为 PlayerState 是个密封密封本质上也是一个,我们前面提到过内联有不能继承类型限制,当时给出理由是内联不能包含其他状态。...这样看来,如果当中足够简单,包含状态,是不是将来有希望支持继承呢? 其实问题不只是状态那么简单,还有多态引发装箱和拆箱问题。...因为一旦涉及到,内联很多时候都无法实现内联,我们假定下面的写法是合法: sealed class PlayerState inline class Error(val t: Throwable...内联不能与 Java 兼容

54730

Kotlin | 一份10万字随查笔记,妈妈再也担心我不会Ctrl+F了

深入理解Kotlin协程-bennyhuo大佬前期推荐,难度过高,很可能从憧憬这本书变为骂骂咧咧塞到显示器底下。...我们无法改变时代走向,但至少别被远远拉在后面,我们可能无法改变我们学历,家室,但未来是由我们自己来决定。做一个永远学习者,永远保持对技术热爱。 Kotlin学习之路 什么是Kotlin?...Kotlin学习指南 Kotlin就是一门可以运行在 JAVA虚拟机,Android,浏览器上静态语言,它与Java100%兼容,如果你对Java非常熟悉,那么你就会发现Kotlin除了自己标题库之外...= null //推荐这种写法 } 基本运算符 任意可以定义或者重载基本运算符 通过运算符对应具名函数来定义 对于参数个数做要求,对参数和返回类型不做要求 不能像Scala一样定义任意运算符...密封是一种特殊抽象 密封子类定义在自身相同文件 密封子类个数有限 简单来说,密封相当于一事物具体子分类,有明确类型区别,子类有具体个数。

2.6K20

Kotlin|这些隐藏内存陷阱,你应该熟记于心

=构建者模式; 关于 arrayOf() 使用细节。 好了,让我们开始吧! 密封小细节 密封用来表示受限继承结构:当一个值为有限几种类型、而不能有任何其他类型时。...在某种意义上,他们是枚举扩展:枚举类型值集合也是受限,但每个枚举常量只存在一个实例,而密封一个子类可以有可包含状态多个实例。...错误示例 sealed 初始化 如题,我们有一个公用属性 sum ,为了便于复用,我们将其抽离到 Fruit 构造函数,让子类便于初始化时传入,而不用重复显式声明。...♂️ 答案是可以,我们利用 接口 改造即可,如下所示: 如上所示,我们增加了一个名为 IFruit 接口,并让 密封 实现了这个接口,子类默认在构造函数实现该属性即可。...总结 本篇,我们以日常开发视角,去探寻了 Kotlin 那些 [隐藏] 内存陷阱。 仔细回想,上述恰当用法都是建立在 [不熟练] 背景下。

75930

Kotlin 1.4.30-RC 密封接口来啦!

关键词:Kotlin News 密封Kotlin 老成员了,现在也可以有密封接口了。...这一点与 Kotlin 密封语法类似,Kotlin 当中类型默认就是 final ,大家可能都没有注意过这个限制。...三选一, 第一种:sealed,就是你自己也称为密封,这样子类还是受限制 第二种:non-sealed,就是明确告诉大家,你不是密封,而且不是 final,这意味着 Playing 这个类型是可以被其他类型继承...因为密封子类在使用过程总是会声明成,这个过程总是会出现装箱: val playerState: PlayerState = Idle ... playerState = Error(...)...// 装箱 所以,我们几乎可以认为,内联密封当中使用基本上都是错误用法。

67730

Kotlin学习笔记(四)-面向对象

、变量替代 JvmField 和JvmStatic使用后,可以用相同语法在Java调用 方法重载 与Java相同,,需要注意一下几点 方法重载与默认参数 返回类型不能作为方法签名一部分 只有参数列表和方法名...可继承,实现多个接口,与Java注意区别. kotlin内部类与java 内部类区别 java内部类可以直接访问外部类成员, kotlin内部类不能直接访问外部类成员 必须用inner标记之后才能访问外部类成员...(非静态内部类持有外部类引用,而静态内部类无法持有外部类引用,这是因为静态内部类优先于非实例对象而存在) 内部类和静态内部类区别: 是否持有外部类状态(也就是非静态内部类可以调用 外部类.this...枚举定义方法,那么要在枚举对象最后加上; 这基本是Kotlin唯一一个需要强制写;地方 密封 密封与枚举区别:前者是子类可数,后者是实例可数 密封(Sealed Class)子类必须和定义在同一个文件...密封子类是可数,因为子类只能在内部或者和处于同一个文件,在其他地方是无法创建子类

81810

《Kotin 极简教程》第7章 面向对象编程(OOP)(2)《Kotlin极简教程》正式上架:

有任何问题,欢迎随时与我交流~ ---- 7.8 注解 Kotlin 注解与 Java 注解完全兼容。...密封 7.10.1 为什么使用密封 就像我们为什么要用enum类型一样,比如你有一个enum类型 MoneyUnit,定义了元、角、分这些单位。...在某种意义上,sealed是枚举扩展:枚举类型值集合也是受限,但每个枚举常量只存在一个实例,而密封一个子类可以有可包含状态多个实例。...密封所有子类都必须与密封在同一个文件声明(在 Kotlin 1.1 之前, 该规则更加严格:子类必须嵌套在密封声明内部): sealed class Expression class Unit...面向对象编程特性: 与构造函数、抽象与接口、继承以及多重继承等基础知识,同时介绍了Kotlin注解、枚举、数据密封、嵌套、内部类、匿名内部类等特性

1.4K20

KotlinKotlin Sealed 密封 ( 密封声明 | 密封子类定义 | 密封特点 | 代码示例 )

密封与枚举 : ① 相同点 ( 类型限制 ) : 从类型种类角度对比 , 与枚举类似 , 枚举集合是受限制 , 不能随意扩展 ; ② 不同点 ( 对象个数限制 ) : 从每个类型对象个数对比..., 枚举每个类型只能存在一个实例 , 而密封每个类型可以创建无数个实例 ; II ....子类声明 : 密封子类 , 必须定义在密封内部 ; ( 1.1 之后版本可以定义在同一个文件 ) sealed class Student { class GoodStudent...密封子类 : ① 定义在密封内部 ( 推荐 ) : 密封子类建议定义在密封内部 , 可以兼容所有版本 ; ② 定义在密封所在文件 : Kotlin 1.1 以后版本 , 可以将密封子类定义在密封声明同一个文件..., 如果 when 列举了所有的密封子类 , 此时可以写 else 分支 , 详情看下面的示例代码 ; IV .

72910

是时候使用Kotlin编程了

并且,Kotlin还提供了智能类型判断功能,使用is类型判断后,编译器自动进行类型转换,引用可以调用子类接口,注意转换只在is代码块中生效。...变量类型可以根据变量值进行自动推导,这里Kotlin基础类型都是对象,使用是Java包装(基础类型包装成对象)。...例如: 当然,也可以直接在声明时候指定构造函数,对象实例化可以写new关键字。...但是这里要注意一点,如果从Java返回集合,不会强制做可空检查,这个是时候如果给不可空引用赋值Java集合null会出现转换错误异常。...this表达式 6.5 小结 第7章 数据密封 7.1 数据 7.1.1 对象复制 7.1.2 序列化 7.1.3 成员解构 7.2 密封 7.3 小结 第8章 集合与泛型 8.1集合 8.1.1

3.2K10

第3章 Kotlin 可空类型类型系统第3章 Kotlin 可空类型类型系统

3.1.1 类型系统作用 使用类型系统,编译器可以检查无意义、无效类型匹配等错误代码。这也正是强类型语言能够提供更多代码安全性保障原因之一。...如果要转换类型与指定类型兼容,转换就会成功进行;如果类型兼容,使用as?运算符就会返回值null。...Goo null >>> goo as Foo Line71$Goo@73dce0e6 我们可以看出,在Kotlin是禁止转换为子类型。...按照Liskov替换原则,转换为子类是对OOP严重违反,不提倡、也建议。...严格来说,是不能转换为子类,子类包含了所有的方法和属性,而则未必具有和子类同样成员范围,所以这种转换是不被允许,即便是两个具有父子关系类型,也是如此。

2K20

Kotlin Vocabulary | 密封 sealed class

枚举类型每个值只允许有一个实例,同时枚举也无法为每个类型添加额外信息,例如,您无法为枚举 "Error" 添加相关 Exception 类型数据。...子类可以是任意: 数据Kotlin 对象、普通,甚至也可以是另一个密封。但不同于抽象是,您必须把层级声明在同一文件,或者嵌套在内部。...使用 when 语句处理密封时,如果没有覆盖所有情况,可以让编译器给我们一个错误提示。...Result 是一个抽象,并且包含两个构造方法: 一个私有的默认构造方法 一个合成构造方法,只有 Kotlin 编译器可以使用 这意味着其他无法直接调用密封构造方法。...,让编译器和 IDE 帮忙避免类型错误吧。

1.1K10

使用lombok@Builder注解:Error:java: 无法构造器应用到给定类型

背景 今天写项目用lombok@Builder注解,突然就报错咯。 ?...Error:(14, 1) java: 无法 xxx 构造器 xxx 应用到给定类型; 需要: 没有参数 找到: java.lang.Integer,java.lang.String,java.lang.String...java.lang.String,java.util.Date,java.lang.String,java.util.Date 原因: 实际参数列表和形式参数列表长度不同 解决方案 builder默认用是全参数构造函数...它实现方式是会对标注这个注解所有成员变量,所以在使用@Builder构建时候如果不显式对某变量赋值的话默认就是null,因为这个变量此时是Builder,通过调用build()方法生成具体...T则是通过私有构造函数来实例化,默认是全参数构造函数。

3.1K30

一篇就够——Kotlin快速入门

当一个变量被赋予了某个类型数值之后,不能再赋给他其他类型数值,否则,会报 类型错误。...V12、函数加强 函数命名格式说明: fun 函数名(参数:参数类型):返回类型{ 函数体 } 如果没有返回值,使用 :Unit 标识,也可以省略返回值也是使用 return 返回。...私有即是封装一种体现 V35、面向对象——继承 一个对象直接使用另一个对象属性或方法 —— 同Java 被继承必须用 open 修饰,表示允许其他继承该类 方法如果允许子类重写,也需要用...open 修饰 重写方法时需要用 overRide 修复重写后方法 继承格式: class子类:() open class Father { //用 open 修饰,允许被继承...V42、印章/密封 (Sealed Class) 1、印章特点 子类类型有限成为 印章/密封 印章使用 sealed 作为修饰符 印章本身没有构造方法 2、印章与枚举区别 都是有限数据

1.5K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券