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

Kotlin】常用 Kotlin ② ( 枚举 | 枚举定义函数 | 密封 )

文章目录 一、枚举 二、枚举定义函数 1、枚举定义普通函数 2、枚举定义构造函数 三、密封 一、枚举 ---- Kotlin 中使用 枚举 定义常量 , 枚举定义格式如下 : 枚举常量...枚举 常量名称 ; MALE true 枚举常量 Gender.MALE 是 Gender 一个 实例对象 ; 二、枚举定义函数 ---- 在枚举 , 可以 定义函数 , 包括 普通函数...和 构造函数 ; 1、枚举定义普通函数 通过 枚举 类型常量 ( 实例对象 ) 可以 调用 枚举定义方法 ; 为枚举定义普通函数 : 在枚举 Gender 定义了 log 函数 ,...---- 枚举类型 是一组 子类型 闭集 ; 密封 可以 定义 枚举类型 子类型闭集 , 一个密封可以有多个子类 , 继承密封子类 必须 与 密封在相同 Kotlin 代码文件 ; 密封适用于这种情况..., 要使用枚举特性 , 但是需要在枚举基础上保存多个特性 ; 枚举只能实现简单常量列举 , 如果需要更复杂 子类型闭集 , 则需要使用密封 ; 代码示例 : sealed class Gender

1K10

Java密封介绍

今天将给大家介绍一下Java密封。 Sealed是Java武器库一个新引入(JDK17)。由于这一添加,在Java编程语言中关键字集合添加了另一个关键字。...事实上,引入了几个新关键字来支持密封密封和非密封。 这些扩充了继承经典概念,在继承概念,只有一组特定子类才能扩展父。因此,本质上,Final不允许继承。...不能创建对象 Shape s = new Box(); // 这样是可以 Java密封是什么? 正如您所看到,在引入Sealed之前,继承在Java是一种要么全有要么全无事情。...密封和子类必须位于同一个命名模块,尽管它们可以位于不同。 对于未命名模块,密封和子类必须在同一个包。 Java密封接口 密封接口声明方式与密封几乎相同。...尽管它们可能在特殊情况下使用,但密封可能在API库设计。重点是语言中提供了灵活性;程序员可以根据程序要求使用它们。

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

层次结构设计

图1 在写程序时,我们会经常遇到如上图所示一种情形——深层调用,ClassD1和ClassD2需要调用ClassA关联ClassX、ClassY和ClassZ等,对于这种情况,经常见到通过构造函数一层层往下传递做法...它不符合开闭原则,当新增一个依赖时,就需要增加一个参数,结果会导致参数列表膨胀,样子也非常难看。 那究竟怎么做更好了?...对这个问题思考过很多次,但并没有找到一个完全满意解决方案,针对这种情形,我主要采取两种方法: 1.尽量让ClassA成为一个单例,这样ClassD要获取ClassX等就非常方便了,即使增加一个ClassX1...ClassA成为单例,这个时候采用第二种办法,即总是通过构造函数将ClassA往下传递,如ClassB(ClassA*);ClassC(ClassA*);ClassD(ClassA*),这种办法也是符合开闭原则,...再增加一个ClassX1也非常方便; 办法是提出来了,但这并不是最优,这种情形就如同一个公司或一个组织人数众多,在采取以上两个方法 之间,就好先考虑组织扁平化,减少信息传递层次,增加传递效率。

55530

详解 Java 17新特性:“密封

Java 17推出新特性Sealed Classes经历了2个Preview版本(JDK 15JEP 360、JDK 16JEP 397),最终定稿于JDK 17JEP 409。...下面就来一起认识一下Java 17Sealed Classes。 密封作用 在面向对象语言中,我们可以通过继承(extend)来实现能力复用、扩展与增强。...新手段:密封 为了进一步增强限制能力,Java 17密封增加了几个重要关键词: sealed:修饰/接口,用来描述这个/接口为密封/接口 non-sealed:修饰/接口,用来描述这个...,搞乱这样三层结构。...定义来阻断后续继承关系,比如这样: public final class Ezreal extends AttackHero { } 通过这样设置,这三层英雄结构第一第二层就得到了比较好保护

61130

探索Python算法:层次

在机器学习领域中,层次是一种常用算法,它能够以层次结构方式将数据集中样本点划分为不同簇。层次一个优势是它不需要事先指定簇数量,而是根据数据特性自动形成簇层次结构。...本文将详细介绍层次算法原理、实现步骤以及如何使用 Python 进行编程实践。 什么是层次层次是一种自下而上或自上而下方法,它通过逐步合并或分割样本点来形成一个簇层次结构。...得到簇层次结构:最终得到一个簇层次结构,其中每个样本点都被分配到一个簇。...Python 层次实现 下面我们使用 Python scikit-learn 库来实现一个简单层次模型: import numpy as np import matplotlib.pyplot...总结 层次是一种强大而灵活算法,能够以层次结构方式将数据集中样本点划分为不同簇。通过本文介绍,你已经了解了层次算法原理、实现步骤以及如何使用 Python 进行编程实践。

12910

About Kotlin-Kotlin2About Kotlin(2)

About Kotlin(2) 继续昨天部分。介绍Kotlin。...其实是一组集合。可以用来表示受限继承结构。 其也可以有子类,所有子类也必须在相同文件声明。...密封从某种意义上说,它们是枚举扩展:枚举类型值集也受到限制,但每个枚举常量仅作为单个实例存在,而密封子类可以包含多个实例并包含状态。这样又具备了枚举不具备灵活性。...val demo = Outer().Inner().foo() 嵌套 不用inner标记,直接写在内部,在kotlin称为所谓嵌套 class Outer{ private val...) 在Kotlin中使用对象表达式和对象声明进行表示 对象表达式(匿名) 匿名其实就是在Java匿名内部类。

2.6K20

About Kotlin-Kotlin1About Kotlin(1)

About Kotlin(1) 因为是从Java角度来学习Kotlin,在Java作为第一等公民。故学习Kotlin,也先从其开始。...Kotlin 普通 class Kotlin没有添加修饰符直接以class开头都是final。final意义在于JVM可能存在优化(常量和方法内联)和防止继承滥用。...构建这样对象需要写很多代码。 对应Open 对应上面的kotlinopen就是能够被继承了。必须在声明时候使用open关键字。...//Kotlin中所有是Any,类似于Object,不过Any不输于java.lang.Object,其有三个方法 //这里operator是操作符重载,在Kotlin符号中会说明 public...在Kotlin,override不是可选注解而是强制关键字。所以由此引发bug就不会再有了,编译器会提前警告你。Kotlin把这些事清楚展现出来。

1.2K30

设计模式之桥接模式(Bridge 模式)功能层次实现层次层次结构混杂与分离桥接模式具体实例小结

这里出现了两个可能有点陌生词汇,功能层次实现层次。 所以我们先来介绍这两种层次结构,因为桥接模式就是为了连接这两种层次结构。...功能层次 用于添加功能,假如现在有一个,我们想在这个添加一个新功能,同时又不改变原有的,那么我们可以采用继承方法,继承自这个,然后在继承添加一个具体方法。...父通过声明抽象方法来定义接口 子类通过实现具体方法来实现接口 层次结构混杂与分离 所以学习了功能层次和实现层次之后,我们在编写子类就可以考虑一个问题,我们要添加功能还是添加实现。...当层次结构只有一层时候,功能层次结构与实现层次结构是混在一起,这样就容易是层次结构变得复杂难以理解。...例如,如果我们程序依赖操作系统部分划分为max,windows和linux版,我们就可以利用桥接层次实现层次来表现这些依赖操作系统部分。

72610

Kotlin常用及其使用

一、构造函数和初始化块 1.初始化块 2.主构造函数 3.次构造函数 4.他们之间联系 二、属性 1.属性声明 2.避免递归调用幕后字段 三、常用 一、构造函数和初始化块 1.初始化块 代码初始化工作由它负责...,在调用主构造函数之前执行,这部分理论上可以进行任何工作,但建议初始化赋值可以放在这,其余最好由其他专门地方处理,采用init关键字 init{ println("ww cool") }...2.主构造函数 主构造函数只能由一个,初始化块相当于放在主构造函数无参函数,按顺序执行初始化块,这一点和传统面向对象编程主构造函数没有太大区别。..." //set等下请看幕后字段 } 2.避免递归调用幕后字段 下面这个代码看上去好像没有问题,但事实上它递归调用了属性get和set方法 class MyClass(){ var...和getter,所以不用这么担心 三、常用 抽象 含有抽象方法称为抽象,这一点和java里面很像 内部类 使用inner关键字,可以访问内部类外属性 class outer{ val

99420

Kotlin 集合排序Kotlin 开发者社区

在本教程,我们将重点关注Kotlin排序。此外,我们将使用kotlin.comparisons包来实现复杂排序规则。...在Kotlin,我们有多种方法来创建Comparator对象,我们将在下一节中介绍它: val sortedValues = mutableListOf(1 to "a", 2 to "b", 7 to...对于降序,我们可以使用反向方法或者定义正确 比较器。 3.比较 Kotlin包含一个非常有用包来构建 Comparator - *kotlin.comparisons。...*在以下部分,我们将讨论: 比较器创建 处理空值 扭转订单 比较器规则扩展 为了简化Comparator创建 *, * Kotlin带来了许多工厂方法,使我们代码更具表现力。...结论 在本快速教程,我们了解了如何使用sort,sortBy和sortWith方法对Kotlin集合进行排序。

2.4K50

Kotlin实体创建方式

= '1' } 补充知识:Kotlin、构造器、对象 1.Kotlin定义 构成: 构成由构造函数和初始化代码块、属性(字段)、函数(方法)、内部类(嵌套)、对象声明五部分组成 /.../Kotlin也是使用class关键字创建 class Empty 2.创建对象 fun main(args: Array<String ) { val empty=Empty() /.../Kotlin创建对象无new关键字 } 3.创建构造器 Kotlin当没有创建构造器时,与Java类似的是,与Java类似的就是当没有显示提供主函数时,Kotlin会为其生成一个无参构造。.../** * 构造器 constructor Kotlin中有一个主构造函数和多个二级构造函数 * 主构造函数是一部分,跟在名后面 * 在Java,构造方法必须和名相同,而在Kotlin...Kotlin抽象定义 抽象,可以理解为定义了一个模板。所有的子类都是根据这个模板是填充自己代码。 关键字:abstract 抽象可以分为:抽象、抽象函数、抽象属性。

3.8K10

数据结构层次化组织 -- 树总览

树(Tree)是一种层次数据结构,它在计算机科学起到了关键作用。树结构类似于现实生活树,具有根节点、分支节点和叶子节点。...树堆(Heap): 一种特殊树型数据结构,用于高效查找和操作最值元素。最小堆和最大堆是两种常见堆。Trie树(字典树): 用于高效存储和检索字符串数据结构,经常用于实现字典、前缀匹配等功能。...数据库索引: 数据库管理系统使用树结构(如B树或红黑树)来加速数据检索和排序。编译器: 语法分析器通常使用语法树来表示程序结构,以便进行编译和优化。...网络路由: 网络路由算法使用树结构来确定最佳路径。图形学: 场景图和层次结构通常以树形式表示,用于图形渲染和动画。人工智能: 决策树和行为树等树结构用于模拟决策和行为。...树遍历是许多树操作基础,它们可以用于搜索、数据提取、树复制等任务。树是一种重要数据结构,它在计算机科学具有广泛应用。了解不同类型树以及它们属性和用途对于解决各种问题非常有帮助。

31450

【Java 基础篇】Java抽象:构建灵活继承层次结构

导言 抽象是面向对象编程重要概念之一,它允许定义一种具有一定行为和结构,但不能直接实例化。在Java,抽象通过abstract关键字进行声明,并且可以包含抽象方法和具体方法。...抽象通过定义抽象方法和具体方法,提供了一种基础框架供子类继承和实现。抽象一般用于定义具有共同特征和行为一组子类。 二、抽象语法 在Java,声明抽象需要使用abstract关键字。...通过在抽象定义抽象方法,强制子类实现这些方法,确保子类具有一定行为和结构。...这样可以避免代码重复编写,提高了代码复用性和可维护性。 2. 规范子类行为 抽象可以定义抽象方法,强制子类实现这些方法,确保子类具有一定行为和结构。...同时,也强调了抽象优势,包括封装共享代码、规范子类行为和实现多态性。希望通过本篇博客阅读,读者对Java抽象有了更深入理解,并能够灵活运用抽象构建灵活继承层次结构

31150

kotlin数据重写setter getter正确方法

概述 在开发过程,经常会创建一些数据里,其没有任何逻辑功能,仅仅来用来保存数据。在Kolin,将这些统一称为数据,用关键字data标记。...函数对, toString() 函数, 输出格式为 “User(name=John, age=42)” , componentN() 函数群, 这些函数与属性对应, 函数名数字 1 到 N, 与属性声明顺序一致..., copy() 函数 如果在该数据或者基重写了以上某个成员函数,将不会再自动推断,以重写为准。...前言 kotlin数据,由于其内部封装了getter和setter方法,极大地简化了我们编程代码,但同时其不能像java那样方便重写getter或者setter方法,也给大家造成了一定麻烦。...这种格式,或者yyyy年MM月dd日这种,再或者更加友好一点,根据时间段,转成1小时前、2天前、一周前这种,在实际开发中都是常有的情况,在Java我们可以很方便在getter方法做这些处理,但是kotlin

3.7K10

C#结构

结构区别 类型方面 结构是值类型,我们知道值类型是分配在堆栈上,因此所有值类型都是结构类型,比如int是System.int32结构。通过结构可以创建更多值类型。...是引用类型,引用类型是分配在堆上 。堆栈执行效率比堆执行效率高很多,但是堆栈资源是有限,它并不适合处理大复杂逻辑对象。因此结构能处理是作为基类型对待小对象,而处理是商业逻辑。...由于结构是值类型,所以结构之间赋值可以创建新结构,而是引用类型之间赋值只是复制引用(地址)。...结构也不能有protected修饰符,并且可以不使用new操作符来初始化,但这里需要注意是在结构初始化实例字段是错误 Tip:结构不能定义默认、不带参数构造函数,只能定义带参构造函数...只有满足上面四条条件才能使用结构。但是呢使用结构也要注意以下这几个问题: 一般情况下应该使用class而不是struct。

76910

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

新语法结构语法结构,勾勒出了 Java 语法进化一个趋势,将开发者从复杂、繁琐层次抽象逐渐解放出来,以更高层次、更优雅抽象,既降低代码量,又避免意外编程错误出现,进而提高代码质量和开发效率...1.8 密封背景:在 Java 如果想让一个不能被继承和修改,这时我们应该使用 final 关键字对进行修饰。...Java 15 尝试解决这个问题,引入了 sealed ,被 sealed 修饰可以指定子类。这样这个就只能被指定继承。...JDK15预览特性:通过密封和接口来限制超使用,密封和接口限制其它可能继承或实现它们其它或接口。具体使用:使用修饰符sealed,可以将一个声明为密封。...密封使用保留关键字permits列出可以直接扩展(即extends)它

2.3K11

Kotlin Primer·与对象(上)

为每个加了final也就是说,在 Kotlin 默认每个都是不可被继承。如果你确定这个是会被继承,那么你需要给这个添加 open 修饰符。...4.4 一些特殊 4.4.1 枚举Kotlin ,每个枚举常量都是一个对象。枚举常量用逗号分隔。 例如我们写一个枚举 Programer。...,枚举本质是一个实现了Comparable class,其排序就是按照字段在枚举定义顺序来。...4.4.2 sealed 密封 sealed 修饰称为密封,用来表示受限层次结构。例如当一个值为有限集中 类型、而不能有任何其他类型时。...在某种意义上,他们是枚举扩展:枚举类型值集合也是受限,但每个枚举常量只存在一个实例,而密封一个子类可以有可包含状态多个实例。

63720

Kotlin---扩展

介绍 除了与Java类比这些功能之外,Kotlin还新增了一些新概念 数据(data) 扩展函数 密封(sealed) 匿名 伴生对象(Companion) 数据 通过data关键字来定义数据...通常用来定义纯数据类型结构体。定义数据只能有一个主构造函数定义该数据变量。...而在Kotlin中提供了扩展函数可以来完成这一些操作。 我们可以在使用,通过以下方式来定义扩展函数。但是该扩展函数使用范围仅在这个中使用。...同样,Kotlin也支持扩展属性,与函数类似定义。 密封 密封用来表示受限制继承结构。由于enum每一个实例都是一个常量,所以密封被开发,密封子类可以有多个实例。...Java可以通过new关键字创建匿名,而Kotlin则通过object关键字来定义匿名

56330

JDK17密封sealed和permits使用指南:什么是Javasealed和permits?

这种类设计意图是为了让设计者能够明确规定哪些能够继承或实现该类,从而在Java面向对象编程引入了更高层次封装性和安全性。...通过permits关键字,Java程序员能够构建更加精确控制层次结构,从而在设计模式和代码逻辑引入更多灵活性和可靠性。...这样,我们可以确保图形库形状类型是受控。 小结 Sealed和permits关键字提供了一种强大方法来精确控制Java继承。...限制继承,只允许特定继承 增强安全性,提高可维护性 permits 明确指明哪些被允许继承sealed 精细控制层次结构 总结 随着Java 17推出,sealed和permits关键字引入为...增强面向对象编程灵活性 Sealed和permits关键字为面向对象编程提供了更高级抽象工具。这些工具不仅使得代码结构更加清晰,还允许开发者在设计模式和层次结构上拥有更多灵活性。

13510
领券