首页
学习
活动
专区
圈层
工具
发布

Kotlin入门(15)独门秘笈之特殊类

可是枚举类型实际上是一种类,开发者在代码中创建enum类型时,编译器会自动生成一个对应的类,并且该类继承自java.lang.Enum。...因此,Kotlin摒弃了“枚举类型”那种模糊不清的说法,转而采取“枚举类”这种正本清源的提法。具体到编码上,则将enum作为关键字class的修饰符,使之名正言顺地成为一个类——枚举类。...那么如果某个泛型函数在类内部定义,即变成了这个类的成员方法,又该如何定义它呢?...这个问题在Java中是通过模板类(也叫做泛型类)来解决的,例如常见的容器类ArrayList、HashMap均是模板类,Android开发中的异步任务AsyncTask也是模板类。...不过正如声明变量那样,如果编译器能够根据初始值判断该变量的类型,就无需显式指定该变量的类型;模板类也存在类似的偷懒写法,如果编译器根据输入参数就能知晓参数类型,则调用模板类的构造函数也不必显式指定参数类型

1.5K30

Swift学习总结

10、for-in循环支持where子句,如 for i in 1…100 where I%3==0 { } Where子句是用来替代for-in中的if条件判断,使代码看起来更优雅,是可替代的。...结构体提供了一种默认的初始化方法,会将所有属性都作为参数。与结构体不同,类没有默认的成员初始化方法。 在方法实现中,属性如果遇到同名参数才需要指定self,不然则不需要。...在某个实例需要修改或写入存储时,该实例才会产生一份自己的副本,在这之前,它们会维护自己对同一份存储的引用。...这里的多继承协议,有点类似c++的抽象类了 你可以在协议的继承列表中,通过添加 class 关键字来限制协议只能被类类型遵循,而结构体或枚举不能遵循该协议。...5、swift把c++中的模板特性引入,称为泛型。

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

    《Effective Objective-C》干货三部曲(二):规范篇

    第2条: 在类的头文件中尽量少引用其他头文件 有时,类A需要将类B的实例变量作为它公共API的属性。...但是个别的时候,必须在头文件中引入其他类的头文件: 主要有两种情况: 该类继承于某个类,则应该引入父类的头文件。 该类遵从某个协议,则应该引入该协议的头文件。而且最好将协议单独放在一个头文件中。...虽然直观上可以知道这个方法通过传入的两个参数来组成矩形的size,但是我们并不知道哪个是矩形的宽,哪个是矩形的高。 来看一下正确的?...而且,哪个参数是高度,哪个参数是宽度,看得人一清二楚。永远要记得:代码是给人看的。 笔者自己总结的方法命名规则: 每个冒号左边的方法部分最好与右边的参数名一致。...第26条:勿在分类中声明属性 除了实现文件里的class-continuation分类中可以声明属性外,其他分类无法向类中新增实例变量。

    1.1K21

    《Effective Objective-C》干货三部曲(二):规范篇

    第2条: 在类的头文件中尽量少引用其他头文件 有时,类A需要将类B的实例变量作为它公共API的属性。...但是个别的时候,必须在头文件中引入其他类的头文件: 主要有两种情况: 该类继承于某个类,则应该引入父类的头文件。 该类遵从某个协议,则应该引入该协议的头文件。而且最好将协议单独放在一个头文件中。...虽然直观上可以知道这个方法通过传入的两个参数来组成矩形的size,但是我们并不知道哪个是矩形的宽,哪个是矩形的高。 来看一下正确的?...而且,哪个参数是高度,哪个参数是宽度,看得人一清二楚。永远要记得:代码是给人看的。 笔者自己总结的方法命名规则: 每个冒号左边的方法部分最好与右边的参数名一致。...第26条:勿在分类中声明属性 除了实现文件里的class-continuation分类中可以声明属性外,其他分类无法向类中新增实例变量。

    96110

    【C++11】一些易用性的改进

    强类型枚举(枚举类) ​ C++11 中引入了强类型枚举(strongly-typed enum),也称为枚举类(enum class),用于替代传统的 C++ 枚举类型。 ​...而强类型枚举使用类的语法定义枚举类型,可以避免这些问题,并提供更好的类型安全性和可读性。 ​...constexpr 关键字的功能是 使指定的常量表达式获得在程序编译阶段计算出结果的能力,而不必等到程序运行阶段。...在 C++11 标准中,constexpr 可用于修饰【普通变量】、【函数】、【模板函数】以及【类的构造函数】。 ​...display(),但由于其返回值类型未定,因此在实例化之前无法判断其是否符合常量表达式函数的要求: 第 22 行代码处,当模板函数中以自定义结构体 myType 类型进行实例化时,由于该结构体中没有定义常量表达式构造函数

    34300

    设计规则

    无标志特性的枚举应通过使用零值来定义成员,这样默认值即为该枚举的有效值。 如果应用了 FlagsAttribute 特性的枚举定义值为零成员,则该成员的名称应为“None”,以指示枚举中尚未设置值。...另外,out 和 ref 参数之间的差异没有得到广泛了解。 CA1024:在适用处使用属性 公共或受保护方法的名称以“Get”开头,没有采用任何参数或返回的值不是数组。 该方法可能很适于成为属性。...如果可以按照有意义的方式组合一个枚举的已命名常数,则对该枚举应用 FlagsAttribute。 CA1028:枚举存储应为 Int32 枚举是一种值类型,它定义一组相关的已命名常数。...CA1040:避免使用空接口 接口定义提供某个行为或使用协定的成员。 接口所描述的功能可以被任何类型采用,而不管该类型出现在继承层次结构中的哪个位置。 类型通过实现接口的成员来实现接口。...CA1061:不要隐藏基类方法 如果派生方法的参数签名只是在类型方面有所不同,而且与基方法的参数签名中的对应类型相比,这些类型的派生方式更弱,则基类型中的方法由派生类型中的同名方法隐藏。

    2.7K20

    小朋友学Python(10):CC++JavaPython的关键字

    自动变量,只在定义它们的时候才创建,在定义它们的函数返回时系统回收变量所占存储空间。对这些变量存储空间的分配和回收是由系统自动完成的。一般情况下,不作专门说明的局部变量,均是自动变量。...auto 在C++98/03中这个这个关键字用于声明块中的变量的生存期为自动生存期,若是对象同时具有自动存储类,即生存期在块结束时结束。这样的变量被称为局部变量。...extern, export 为了访问其他编译单元(如另一代码文件)中的变量或对象,对普通类型(包括基本数据类、结构和类),可以利用关键字extern,来使用这些变量或对象时;但是对模板类型,则必须在定义这些模板类对象和模板函数时...static 和C语言类似,声明静态存储期对象。在C++还有另一个用途——用于类作用域声明,表示声明的成员是类共有的,不需要通过类的对象访问。 sizeof 返回类型名或表达式具有的类型对应的大小。...|枚举 extends |表明一个类型是另一个类型的子类型,这里常见的类型有类和接口 final |用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变

    1.6K80

    【笔记】《深入理解C++11》(上)

    初始化列表的效果总是慢于就地初始化, 但也快过在构造函数中进行赋值 注意: 非常量的静态变量依然要在头文件外定义从而保证在程序中只存在一个 sizeof()可以对类成员表达式使用了 类模板也可以声明友元了..., 例如当存在非POD成员且这个成员有非平凡的构造函数时, 这个union的默认构造将被删除 匿名的union对外是开放的, 因此放在类的声明中可以按照构造函数的不同而初始化为不同的类型, 此时类被称为枚举式的类...SFINEA的原因int对f1的尝试不算做实例化的error, 而属于匹配过程中的一次failure f(10); } 基于对这个匹配过程的标准化描述, 我们可以无关编译器地对模板匹配的可行性进行判断...下面是这类做法的一个简单样例 // From: https://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error // 这段在展示如何利用模板在编译器判断模板参数是否具有某个定义的符号...endl; // 输出 false // foo两者都可以满足, 同时对于f2来说匹配更加特化, 因此实例化了f2, 从而true // 通过这样对于函数匹配的hack操作, 我们可以在编译期获得某个模板参数是否具有某个属性

    2.4K20

    一起学Excel专业开发22:使用类模块创建对象1

    在Excel应用程序中,经常使用类模块来创建自已的对象,用于: 1.封装VBA和Windows API代码,使之更易于使用或重用。 2.捕获事件。 3.引发事件。 4.创建自已的对象和对象模型。...在类模块中,所有的公共变量或属性过程都可作为对象的属性,所有的公有过程或函数均可作为对象的方法。...属性过程用于控制变量与外界交互,有3种形式: 1.直接对属性赋值 2.使用Set语句为属性赋值对象 3.使用Get语句返回值或对象引用 在CCell类模块中,使用了2个私有的模块级变量来存储属性值:变量...muCellType存储单元格的类型,其值为anlCellType枚举成员值;变量mrngCell存储对某个单元格的引用,它表示由CCell类所创建的对象。...在CCell类模块中,使用Set语句给Cell属性指定一个Range型的引用并将其保存到变量mrngCell中。

    1.1K20

    记一次愚蠢的操作--线程安全问题

    系统架构 概括:service系统提供一个RPC接口,别人调用我提供的接口,我在service系统中对这个消息进行判断、拼接等等业务逻辑,最后会将这个消息放到消息队列里边。...而小王的这些邮件又十分在意是否成功发送出去了,如果发送失败了他那边需要重发。于是,他监听我们DB的binlog,根据binlog的信息来判断是否需要重发。...,比如我发现小王某个参数传进来有问题,我反手就是: Response.PARAM_ERROR service系统主要做了两件事 判断参数/类型,各种业务逻辑有没有问题,将小王带过来的参数封装成Task...于是我就去找原因啦,在查代码的时候发现前同事还在Service系统中的某个类留了一个注解@NotThreadSafe。...使用枚举就不应该带有状态的属性(能修改、可变的属性) 推荐阅读: 在工作中常用到的SQL Github上有哪些Java面试/学习相关的仓库推荐?

    45340

    如何编写高质量的代码

    2、z 枚举类中不要提供setter 没必要,而且危险 三元操作符的类型务必一致 不一致会导致自动类型转换,类型提升int->float->double等 避免带有变长参数的方法重载 变长参数的方法重载之后可能会包含原方法...在switch的default代码块中增加AssertionError错误; (switch语句在使用枚举类作为判断条件时,避免出现增加了一个枚举项,而switch语句没做任何修改,编译不会出现问题,但是在运行期会发生非预期的错误...使用valueOf前必须进行校验; (Enum.valueOf()方法会把一个String类型的名称转变为枚举项,也就是在枚举项中查找出字面值与该参数相等的枚举项。...简单说,就是父类定义抽象模板作为骨架,其中包括基本方法(是由子类实现的方法,并且在模板方法被调用)和模板方法(实现对基本方法的调度,完成固定的逻辑),它使用了简单的继承和覆写机制。...但是运行结果出现奇怪现象:部分线程还是启动了,也就是在某些线程(没有规律)中的start方法正常执行了。在不符合判断规则的情况下,不可启用状态的线程还是启用了,这是线程启动(start方法)一个缺陷。

    1.2K20

    前端入门10-JavaScript语法之对象声明正文-对象

    通过构造函数方式如何给新创建的对象添加一些初始化的属性,这些细节和原理在函数一节中再讲,这里需要注意一点的就是,当不往构造函数传参数时,此时括号是允许可以省略的。...原型 原型可以理解成 Java 中的父类概念。 在 JavaScript 中,对象也存在继承关系,继承的双方都是对象,对象是从对象上继承的,被继承的那个对象称作原型。...添加属性 但需要注意一点的是,不像 Java 中在编写类代码,为类添加成员变量时,可以只声明却初始化。在 JavaScript 中,是不允许这样的。...Object.keys() 参数传入需要遍历属性的对象,通过该方法,可以获得一个数组对象,数组内就存储着参数传入的对象的自有属性且属性是可枚举性的,相当于 for-in 方式结合 hasOwnProperty...,接下去就是如何操作了,先看一下,如果获取对象某个属性的描述信息: Object.getOwnPropertyDescriptor() 还是通过Object 的一个方法,接收两个参数,第一个参数是对象,

    96830

    3小时Java入门

    基本数据类型相对非常底层,基本类型相同值的对象占有同样的存储单元,判断是否相等可以用 ==。...没有在构造方法中初始化属性时,引用类型的字段默认是null,int类型默认值是0,布尔类型默认值是false。 我们可以为一个类定义多个构造方法,使用时可以根据参数类型和数量自动进行匹配。...十九,静态属性和静态方法 通过static修饰的属性为静态属性,通过static修饰的方法为静态方法。 静态属性和静态方法属于类而不属于特定的实例,在类的实例之间共享。...二十五,泛型 泛型就是编写模板代码来适应任意类型。Java的容器类中大量使用了泛型。 泛型的好处是使用时不必对类型进行强制转换,它通过编译器对类型进行检查。...5,C++ 中可以在类的外部可以定义函数,而Java不允许在类和接口外面直接定义方法。

    3.3K30

    Unity基础教程系列(九)——形状行为(Modular Functionality)

    1.4 在需要的时候添加行为 在SpawnZone.SpawnShape中,将这些行为组件添加到形状中并设置其属性,而不是形状本身的属性。 ? 在这里可以使用var吗?...尽管在未定义显式构造函数方法的情况下,类仍然具有隐式公共默认构造函数方法,但这不能保证它们的一定存在。因此,我们必须通过明确要求存在不带参数的构造函数方法来进一步限制模板类型。...然后,可以将该行为的实例添加到ShapeBehaviorPool  池中,而不是其自身类型的池中。...扩展方法可以在任何类或结构中定义,因此我们将使用专用的静态ShapeBehaviorTypeMethods类,可以将其与枚举放在同一文件中。 ? 什么是扩展方法?...扩展方法是静态类中的静态方法,其行为类似于某种类型的实例方法。该类型可以是任何东西,类、接口、结构、原始值或枚举。扩展方法的第一个参数定义了该方法将要操作的类型和实例值。

    1.7K40

    Java基础重构-面向对象

    所以我们在使用继承的时候。首先得明白:子类是一种能特殊的父类。 对于具备以下条件之一才使用继承,否则使用 组合 也能实现类的复用。 子类需要额外增加属性,而不仅仅是属性值的改变。...从多个具有相同特征的类中抽象出了一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类设计的随意性。...抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展,改造,但子类总体上会大致保留抽象类的行为方式。 什么是接口?...抽象类作为系统中多个子类的共同父类,它所体现的是一种模板设计。...为什么静态内部的实例方法也不能访问外部类的实例属性? 因为静态内部类是外部类的类相关的,而不是外部类的对象相关的。也就说说,静态内部类对象不是寄生在外部类的实例中,而是寄生在外部类的本身中。

    81630

    解放双手!ChatGPT助力编写JAVA框架

    可以看到和设想的还是有些区别的,本想是将枚举放在类上。然后枚举的属性有name,key,和desc。 name:代表枚举map在最外层map中的key。 key:代表枚举的key或值字段。...4.2 框架核心类说明 在ChatGPT给出核心代码之后,参考Spring模块设计最终初版框架类如下: PackageScanner:用于扫描给定包中带有指定注解的类的实用工具类。...PropertiesUtils:提供操作属性文件的实用方法的工具类。 EnumInfo:用于标注枚举类的注解,指定枚举项的名称、key 字段和 desc 字段信息。...EnumContextFactory:枚举上下文工厂类,用于创建和获取单例的枚举上下文对象。 EnumDefinition:表示枚举定义的类,用于存储枚举类的信息。...在业务系统管理端在进行前后端分离的过程中,研发们发现有许多枚举类对应的枚举描述需要给前端返回。 1)一开始设想的是每个枚举类都写代码给前端封装返回文字。

    55330

    JS葵花宝典秘籍笔记,为你保驾护航金三银四

    该属性只能定义在函数体中。 该属性表示的是实际传入的参数个数,不是声明的参数个数。...需要传入一个对象,该传入对象的自有可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)将为新创建的对象添加指定的属性值和对应的属性描述符。 返回值 一个新对象,带着指定的原型对象和属性。...使用 apply, 你可以只写一次这个方法然后在另一个对象中继承它,而不用在新对象中重复写该方法。...concat()会将参数衔接到array中得到一个新数组并返回,它不会修改array,如果传给concat()的某个参数本身是一个数组,则会将该数组的元素衔接到array中,而不是数组本身。...任意多个字符串参数 // body 指定函数体的字符串 // 返回 新创建的Function对象 // 异常 SyntaxError 表示在body参数或某个argument_names参数中存在

    2.1K10

    读书笔记

    如果不行,则把协议单独放在一个头文件中,然后将其引入; 有时候在编写头文件时,需要引入某个类A(如作为当前类的某个属性来使用),但是不需要知道这个类A的实现细节,此时我们不需要直接引入这个类A的头文件...应该用枚举来表示状态机的状态,传递给方法的选项以及状态码等值,给这些值起个易懂的名字; 如果把传递给某个方法的选项表示为枚举类型,而多个选项又可以同时使用,则将各选项值定义为2的幂,以便通过按位或操作将其组合起来...switch 语句并没有处理所有的枚举; 2 对象、消息、运行期 2.1 理解“属性”这一概念 可以用 @property语法来定义对象中所封装的数据; 通过“特质”来指定存储数据所需的正确说到底; 在设置属性所对应的实例变量时...isMemberOfClass 能够判断出对象是否为某个特定类的实例;isKindOfClass 能够判断出对象是否为某类或其派生类的实例; 3 接口与API设计 3.1 用前缀避免命名空间冲突 选择与你的公司...,使调用者可通过此参数来决定应该把块安排在哪个队列执行; 6.4 用块引用其所属对象时不要出现保留环 如果块所捕获的对象直接或间接地保留了块本身,那么就得当心保留环的问题; 一定要找个适当的时机解除保留环

    63620

    Object 中的几个很相似的方法

    ) 的区别 Object.assign()、 Object.create() 和 newObject() 这三个方法 in 和 hasOwnProperty() 两方法的区别 ---- 这两个方法用来判断一个属性是否是某个对象中的...in 运算符用来判断属性在指定的对象或其原型链中是否存在。 hasOwnProperty() 方法相较于 in,该方法会 忽略掉那些从原型链上继承到的属性。...2.使用 ES6 中的类来实现 ---- 另一种方法是 利用 ES6 中的类,在创建类后,类的方法是挂载到类的原型上的,而且这些方法默认是不可枚举的。...因此利用这个对象可以实现对象的复制,而不是引用,这在实际开发中是很有用的。因为一旦引用了某个对象,如果改变其中的属性值,那么其它引用该对象的那个属性值也将会改变,这往往是我们不希望看到的。...综上, Object.create() 方法可以改变一个对象的原型,或者说创建一个对象,让这个对象的原型变成你指定的对象;而 newObject() 可以包装任意的变量,使之成为一个包装类;而 Object.assign

    69410

    JAVA入门学习十三

    java.lang.class对象; 初始化某个类的子类 直接使用java.exe命令来运行某个主类 2.类加载器概述 类加载器概述:负责将.class文件加载到内存中,并为之生成对应的class文件,...类等在JDK的JRE里lib目录下rt.jar文件中; Extension ClassLoader 扩展类加载器: 负责JRE的扩展目录中的jar包的加载,在JDK中JRE的lib目录下的ext目录;...,而解剖使用的就是Class类中的方法,所以要先获取每个字节码文件对应的class类型的对象; 总结:反射Reflect一切都是赤裸裸的,包括私有的成员变量; Class类方法: //类的实例代表一个运行...执行指定字节码中的方法 三种方式: (1)Class类中静态方法forName读取配置文件 (2)静态属性class中锁对象 (3)Object 类的getClass()发布方法判断两个对象是否是同一个字解码文件...,而程序运行过程中产生对象其实就是我们刚才反射讲解的内容,所以动态代理其实就是通过反射来生成的一个代理; 在Java中java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler

    61720
    领券