文章目录 一、枚举类 二、枚举类定义函数 1、枚举类定义普通函数 2、枚举类定义构造函数 三、密封类 一、枚举类 ---- Kotlin 中使用 枚举类 定义常量 , 枚举类定义格式如下 : 枚举常量...枚举的 常量名称 ; MALE true 枚举的常量 Gender.MALE 是 Gender 类的一个 实例对象 ; 二、枚举类定义函数 ---- 在枚举类中 , 可以 定义函数 , 包括 普通函数...和 构造函数 ; 1、枚举类定义普通函数 通过 枚举类 的 类型常量 ( 实例对象 ) 可以 调用 枚举类中定义的方法 ; 为枚举类定义普通函数 : 在枚举类 Gender 中定义了 log 函数 ,...---- 枚举类型 是一组 子类型 闭集 ; 密封类 可以 定义 枚举类型的 子类型闭集 , 一个密封类可以有多个子类 , 继承密封类的子类 必须 与 密封类在相同的 Kotlin 代码文件中 ; 密封类适用于这种情况..., 要使用枚举的特性 , 但是需要在枚举基础上保存多个特性 ; 枚举只能实现简单的常量列举 , 如果需要更复杂的 子类型闭集 , 则需要使用密封类 ; 代码示例 : sealed class Gender
今天将给大家介绍一下Java中的密封类。 Sealed类是Java武器库中的一个新引入(JDK17)。由于这一添加,在Java编程语言中的关键字集合中添加了另一个关键字。...事实上,引入了几个新的关键字来支持密封类:密封和非密封。 这些类扩充了继承的经典概念,在继承概念中,只有一组特定的子类才能扩展父类。因此,本质上,Final类不允许继承。...不能创建对象 Shape s = new Box(); // 这样是可以的 Java中的密封类是什么? 正如您所看到的,在引入Sealed类之前,继承在Java中是一种要么全有要么全无的事情。...密封类和子类必须位于同一个命名模块中,尽管它们可以位于不同的包中。 对于未命名的模块,密封类和子类必须在同一个包中。 Java中的密封接口 密封接口的声明方式与密封类几乎相同。...尽管它们可能在特殊情况下使用,但密封类可能在API库的类设计中。重点是语言中提供了灵活性;程序员可以根据程序的要求使用它们。
图1 在写程序时,我们会经常遇到如上图所示的一种情形——深层调用,ClassD1和ClassD2需要调用ClassA关联的ClassX、ClassY和ClassZ等,对于这种情况,经常见到通过构造函数一层层往下传递做法...它不符合开闭原则,当新增一个依赖类时,就需要增加一个参数,结果会导致参数列表膨胀,样子也非常难看。 那究竟怎么做更好了?...对这个问题思考过很多次,但并没有找到一个完全满意的解决方案,针对这种情形,我主要采取两种方法: 1.尽量让ClassA成为一个单例,这样ClassD要获取ClassX等就非常方便了,即使增加一个ClassX1...ClassA成为单例,这个时候采用第二种办法,即总是通过构造函数将ClassA往下传递,如ClassB(ClassA*);ClassC(ClassA*);ClassD(ClassA*),这种办法也是符合开闭原则的,...再增加一个ClassX1也非常方便; 办法是提出来了,但这并不是最优的,这种情形就如同一个公司或一个组织人数众多,在采取以上两个方法 之间,就好先考虑组织的扁平化,减少信息的传递层次,增加传递效率。
Java 17推出的新特性Sealed Classes经历了2个Preview版本(JDK 15中的JEP 360、JDK 16中的JEP 397),最终定稿于JDK 17中的JEP 409。...下面就来一起认识一下Java 17中的Sealed Classes。 密封类的作用 在面向对象语言中,我们可以通过继承(extend)来实现类的能力复用、扩展与增强。...新手段:密封类 为了进一步增强限制能力,Java 17中的密封类增加了几个重要关键词: sealed:修饰类/接口,用来描述这个类/接口为密封类/接口 non-sealed:修饰类/接口,用来描述这个类...,搞乱这样的三层结构。...定义来阻断后续的继承关系,比如这样: public final class Ezreal extends AttackHero { } 通过这样的设置,这三层英雄的结构中第一第二层就得到了比较好的保护
在机器学习领域中,层次聚类是一种常用的聚类算法,它能够以层次结构的方式将数据集中的样本点划分为不同的簇。层次聚类的一个优势是它不需要事先指定簇的数量,而是根据数据的特性自动形成簇的层次结构。...本文将详细介绍层次聚类算法的原理、实现步骤以及如何使用 Python 进行编程实践。 什么是层次聚类? 层次聚类是一种自下而上或自上而下的聚类方法,它通过逐步合并或分割样本点来形成一个簇的层次结构。...得到簇的层次结构:最终得到一个簇的层次结构,其中每个样本点都被分配到一个簇中。...Python 中的层次聚类实现 下面我们使用 Python 中的 scikit-learn 库来实现一个简单的层次聚类模型: import numpy as np import matplotlib.pyplot...总结 层次聚类是一种强大而灵活的聚类算法,能够以层次结构的方式将数据集中的样本点划分为不同的簇。通过本文的介绍,你已经了解了层次聚类算法的原理、实现步骤以及如何使用 Python 进行编程实践。
About Kotlin(2) 继续昨天的部分。介绍Kotlin中的类。...其实是一组类的集合。可以用来表示受限的类的继承结构。 其也可以有子类,所有子类也必须在相同的文件中声明。...密封类从某种意义上说,它们是枚举类的扩展:枚举类型的值集也受到限制,但每个枚举常量仅作为单个实例存在,而密封类的子类可以包含多个实例并包含状态。这样又具备了枚举不具备的灵活性。...val demo = Outer().Inner().foo() 嵌套类 不用inner标记,直接写在类的内部的类,在kotlin中称为所谓的嵌套类 class Outer{ private val...) 在Kotlin中使用对象表达式和对象声明进行表示 对象表达式(匿名类) 匿名类其实就是在Java中的匿名内部类。
About Kotlin(1) 因为是从Java的角度来学习Kotlin,在Java中,类作为第一等公民。故学习Kotlin,也先从其的类开始。...Kotlin中的类 普通的类 class Kotlin中没有添加修饰符直接以class开头的都是final类。final类的意义在于JVM可能存在的优化(常量和方法内联)和防止继承的滥用。...构建这样的对象需要写很多代码。 对应的Open类 对应上面的类,kotlin中的open类就是能够被继承的了。必须在类声明的时候使用open关键字。...//Kotlin中所有类的父类是Any,类似于Object,不过Any不输于java.lang.Object,其有三个方法 //这里的operator是操作符重载,在Kotlin中的符号中会说明 public...在Kotlin中,override不是可选的注解而是强制关键字。所以由此引发的bug就不会再有了,编译器会提前警告你。Kotlin把这些事清楚的展现出来。
这里出现了两个可能有点陌生的词汇,类的功能层次和类的实现层次。 所以我们先来介绍这两种的层次结构,因为桥接模式就是为了连接这两种层次结构。...类的功能层次 用于添加的新的功能,假如现在有一个类,我们想在这个类中添加一个新的功能,同时又不改变原有的类,那么我们可以采用继承的方法,继承自这个类,然后在继承的类中添加一个具体的新的方法。...父类通过声明抽象方法来定义接口 子类通过实现具体方法来实现接口 类的层次结构的混杂与分离 所以学习了类的功能层次和实现层次之后,我们在编写子类的就可以考虑一个问题,我们要添加功能还是添加实现。...当类的层次结构只有一层的时候,功能层次结构与实现层次结构是混在一起的,这样就容易是类的层次结构变得复杂难以理解。...例如,如果我们程序中依赖操作系统的部分划分为max,windows和linux版,我们就可以利用类的桥接层次中的实现层次来表现这些依赖操作系统的部分。
一、构造函数和初始化块 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
在本教程中,我们将重点关注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中的集合进行排序。
= '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 抽象可以分为:抽象类、抽象函数、抽象属性。
树(Tree)是一种层次化的数据结构,它在计算机科学中起到了关键的作用。树的结构类似于现实生活中的树,具有根节点、分支节点和叶子节点。...树堆(Heap): 一种特殊的树型数据结构,用于高效查找和操作最值元素。最小堆和最大堆是两种常见的堆。Trie树(字典树): 用于高效存储和检索字符串数据的树结构,经常用于实现字典、前缀匹配等功能。...数据库索引: 数据库管理系统使用树结构(如B树或红黑树)来加速数据的检索和排序。编译器: 语法分析器通常使用语法树来表示程序的结构,以便进行编译和优化。...网络路由: 网络路由算法使用树结构来确定最佳路径。图形学: 场景图和层次结构通常以树形式表示,用于图形渲染和动画。人工智能: 决策树和行为树等树结构用于模拟决策和行为。...树的遍历是许多树操作的基础,它们可以用于搜索、数据提取、树的复制等任务。树是一种重要的数据结构,它在计算机科学中具有广泛的应用。了解不同类型的树以及它们的属性和用途对于解决各种问题非常有帮助。
Collection vs Collections 首先,“Collection”和“Collections”是两个不同的概念。...正如你从下面结构图看到的,“Collection”是集合层次结构中的根接口,而“Collections”是一个类,它提供了一系列静态方法来操作集合。 ? 2....Collection层次结构 下图展示了Collection的类层次结构。 ? 3.Map层次结构 以下是Map的类层次结构。 ? 4.总结 ?...5.代码示例 下面是一个简单的例子来说明一些集合类型: List a1 = new ArrayList(); a1.add("Program"); a1.add("Creek
导言 抽象类是面向对象编程中的重要概念之一,它允许定义一种具有一定行为和结构的类,但不能直接实例化。在Java中,抽象类通过abstract关键字进行声明,并且可以包含抽象方法和具体方法。...抽象类通过定义抽象方法和具体方法,提供了一种基础框架供子类继承和实现。抽象类一般用于定义具有共同特征和行为的一组子类。 二、抽象类的语法 在Java中,声明抽象类需要使用abstract关键字。...通过在抽象类中定义抽象方法,强制子类实现这些方法,确保子类具有一定的行为和结构。...这样可以避免代码的重复编写,提高了代码的复用性和可维护性。 2. 规范子类行为 抽象类可以定义抽象方法,强制子类实现这些方法,确保子类具有一定的行为和结构。...同时,也强调了抽象类的优势,包括封装共享代码、规范子类行为和实现多态性。希望通过本篇博客的阅读,读者对Java抽象类有了更深入的理解,并能够灵活运用抽象类构建灵活的继承层次结构。
概述 在开发过程中,经常会创建一些数据里,其没有任何逻辑功能,仅仅来用来保存数据。在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
结构与类的区别 类型方面 结构是值类型,我们知道值类型是分配在堆栈上的,因此所有值类型都是结构类型,比如int是System.int32结构。通过结构可以创建更多的值类型。...类是引用类型,引用类型是分配在堆上的 。堆栈的执行效率比堆的执行效率高很多,但是堆栈的资源是有限的,它并不适合处理大的复杂逻辑对象。因此结构能处理的是作为基类型对待的小对象,而类处理的是商业逻辑。...由于结构是值类型的,所以结构之间的赋值可以创建新结构,而类是引用类型的,类之间的赋值只是复制引用(地址)。...结构也不能有protected修饰符,并且可以不使用new操作符来初始化,但这里需要注意的是在结构中初始化实例字段是错误的 Tip:结构体中不能定义默认的、不带参数的构造函数,只能定义带参的构造函数...只有满足上面四条的条件才能使用结构。但是呢使用结构也要注意以下这几个问题: 一般情况下应该使用class而不是struct。
新语法结构新的语法结构,勾勒出了 Java 语法进化的一个趋势,将开发者从复杂、繁琐的低层次抽象中逐渐解放出来,以更高层次、更优雅的抽象,既降低代码量,又避免意外编程错误的出现,进而提高代码质量和开发效率...1.8 密封类背景:在 Java 中如果想让一个类不能被继承和修改,这时我们应该使用 final 关键字对类进行修饰。...Java 15 尝试解决这个问题,引入了 sealed 类,被 sealed 修饰的类可以指定子类。这样这个类就只能被指定的类继承。...JDK15的预览特性:通过密封的类和接口来限制超类的使用,密封的类和接口限制其它可能继承或实现它们的其它类或接口。具体使用:使用修饰符sealed,可以将一个类声明为密封类。...密封的类使用保留关键字permits列出可以直接扩展(即extends)它的类。
为每个类加了final也就是说,在 Kotlin 中默认每个类都是不可被继承的。如果你确定这个类是会被继承的,那么你需要给这个类添加 open 修饰符。...4.4 一些特殊的类 4.4.1 枚举类 在 Kotlin 中,每个枚举常量都是一个对象。枚举常量用逗号分隔。 例如我们写一个枚举类 Programer。...中,枚举的本质是一个实现了Comparable的 class,其排序就是按照字段在枚举类中定义的顺序来的。...4.4.2 sealed 密封类 sealed 修饰的类称为密封类,用来表示受限的类层次结构。例如当一个值为有限集中的 类型、而不能有任何其他类型时。...在某种意义上,他们是枚举类的扩展:枚举类型的值集合也是受限的,但每个枚举常量只存在一个实例,而密封类的一个子类可以有可包含状态的多个实例。
介绍 除了与Java类比的这些功能之外,Kotlin还新增了一些新的概念 数据类(data) 扩展函数 密封类(sealed) 匿名类 伴生对象(Companion) 数据类 通过data关键字来定义数据类...通常用来定义纯数据类型的结构体。定义的数据类只能有一个主构造函数定义该数据类中的变量。...而在Kotlin中提供了扩展函数可以来完成这一些操作。 我们可以在使用的类中,通过以下方式来定义类的扩展函数。但是该扩展函数的使用范围仅在这个类中使用。...同样,Kotlin也支持扩展属性,与函数类似定义。 密封类 密封类用来表示受限制的类继承结构。由于enum每一个实例都是一个常量,所以密封类被开发,密封类的子类可以有多个实例。...Java中可以通过new关键字创建匿名类,而Kotlin中则通过object关键字来定义匿名类。
这种类的设计意图是为了让类的设计者能够明确规定哪些类能够继承或实现该类,从而在Java的面向对象编程中引入了更高层次的封装性和安全性。...通过permits关键字,Java程序员能够构建更加精确控制的类层次结构,从而在设计模式和代码逻辑中引入更多的灵活性和可靠性。...这样,我们可以确保图形库中的形状类型是受控的。 小结 Sealed类和permits关键字提供了一种强大的方法来精确控制Java中的类继承。...限制类的继承,只允许特定类继承 增强安全性,提高可维护性 permits 明确指明哪些类被允许继承sealed类 精细控制类层次结构 总结 随着Java 17的推出,sealed类和permits关键字的引入为...增强面向对象编程的灵活性 Sealed类和permits关键字为面向对象编程提供了更高级的抽象工具。这些工具不仅使得代码结构更加清晰,还允许开发者在设计模式和类层次结构上拥有更多的灵活性。
领取专属 10元无门槛券
手把手带您无忧上云