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

在Android中使用枚举注解不是枚举

很多开发规范都是不建议在Android中使用枚举的,在Android系统中使用枚举的开销是使用常量的2倍。...就是这个类在给他人使用时,构造函数由于参数是 int 类型。所以他可以传递我们定义好的3种类型中的其它任意 int 数值,这就有可能会产生某种错误。...使用这个标识了注解的生命周期,这里指定为 RetentionPolicy.SOURCE 说明这个注解保留在源码阶段。...@IntDef 是 android.support.annotation 包定义的注解,使用它来规范我们的 fileType 变量的取值范围。...如果在传参时没有按照指定的那么编辑器就会发出警告,这样就可以在编码的时候进行提示。 ? @StringDef 同样地,还可以对字符串常量定义注解。

1.3K20

(50) 剖析EnumMap 计算机程序的思维逻辑

上节我们提到,如果需要一个Map的实现类,并且的类型为枚举类型,可以使用HashMap,但应该使用一个专门的实现类EnumMap。 为什么要有一个专门的类呢?...但,直接使用数组需要自己维护数组索引和枚举之间的关系,正如枚举的优点是简洁、安全、方便一样,EnumMap同样是更为简洁、安全、方便,它内部也是基于数组实现的,但隐藏了细节,提供了更为方便安全的接口。...isValidKey的代码与typeCheck类似,但是返回boolean不是抛出异常,代码为: private boolean isValidKey(Object key) { if (key...实现原理小结 以上就是EnumMap的基本实现原理,内部有两个数组,长度相同,一个表示所有可能的,一个表示对应的为null表示没有该键值对,都有一个对应的索引,根据索引可直接访问和操作其...小结 本节介绍了EnumMap的用法和实现原理,用法上,如果需要一个Map且枚举类型,则应该用它,简洁、方便、安全,实现原理上,内部使用数组,根据枚举索引直接操作,效率很高。

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

java | 深入理解Java枚举类型(二)

下面我们来进一步了解EnumMap的用法,先看构造函数: //创建一个具有指定类型的空枚举映射。...EnumMap(Class keyType) //创建一个其类型与指定枚举映射相同的枚举映射,最初包含相同的映射关系(如果有的话)。 EnumMap(EnumMap<K,?...,keyType表示类型信息,keyUniverse表示数组,存储的是所有可能的枚举,vals数组表示对应的,size表示键值对个数。...= null; } 判断value直接通过遍历数组实现判断key就更简单了,判断key是否有效和对应vals[]中是否存在该。...ok~,这就是EnumMap的主要实现原理,即内部有两个数组,长度相同,一个表示所有可能的(枚举),一个表示对应的,不允许keynull,但允许value为null,都有一个对应的索引,根据索引直接访问和操作其数组和数组

1.2K10

MySQL 枚举类型的“八宗罪”

但这里有一个普遍适用于实现枚举的最佳实践: ? 维基百科是这样描述关系表的: …这是一种将可知的枚举数据分离出来的表。...很重要的一点,当更改ENUM类型字段的枚举集合时,MySQL会转换任意已有但不存在于新的枚举集合中的记录为''(空的字符串)。使用关系表,在更改和删除枚举集合时会灵活很多(下面会提到)。 3....ENUM不是所有可能的。...ENUM在其他数据表中不可直接复用 当你(在数据表中)创建了一个带的ENUM字段,在其他数据表中无法直接复用这个ENUM。当有了关系表,相同应用形式下,可以在其他多个数据表中复用。...处理上没问题, 但如果我们使用的是带外的关系表, 那么我们的数据能因健壮性更加可靠。 同样,MySQL 会为ENUM关联枚举索引,并且在使用中会错误地调用到索引不是ENUM,反之亦然。

4.3K52

你是如何处理 PHP 代码中的枚举类型 Enum 的?

之后一些情况,比如合并冲突的时候,如果它的改变了,它可能会引起系统异常。 如果使用标量类型,我们会受限于这种类型,无法辨别这两个是是不是属于两个不同的枚举。 另一个问题是这个代码描述的的不是很好。...我们还可以在枚举类中包含一些逻辑,并使用 switch 语句来模拟多态行为。 但也有一些缺点. 例如, 在大多数情况下, 有些你可以用枚举元素不能用标识检查. 这不是不可能的,我们不得不非常小心....所以,我们可以用每个方法都定义一个枚举元素来实现不是使用 switch 的方法。通过严格的规则来定义枚举,也可以相当可靠地确保每个元素只有一个实例。...数组是用枚举元素名称来索引的。当手动的创建元素,我们定义我们元素名称作为数据的。 我们可以用 WorldSide::iterator() 获取枚举元素的顺序迭代器,来定义和遍历他们。...每一个枚举元素都有一个默认的 __toString(): string 实现返回元素的名称。 每个枚举元素返回其相反的元素。 回顾一下,常量不是枚举枚举不是常量。每个枚举定义一个类型。

1.4K10

如何处理PHP代码中的枚举类型enum?

之后一些情况,比如合并冲突的时候,如果它的改变了,它可能会引起系统异常。 如果使用标量类型,我们会受限于这种类型,无法辨别这两个是是不是属于两个不同的枚举。 另一个问题是这个代码描述的的不是很好。...我们还可以在枚举类中包含一些逻辑,并使用switch语句来模拟多态行为。 但也有一些缺点. 例如, 在大多数情况下, 有些你可以用枚举元素不能用标识检查. 这不是不可能的,我们不得不非常小心....所以,我们可以用每个方法都定义一个枚举元素来实现不是使用switch的方法。 通过严格的规则来定义枚举,也可以相当可靠地确保每个元素只有一个实例。...数组是用枚举元素名称来索引的。当手动的创建元素,我们定义我们元素名称作为数据的。 我们可以用 WorldSide::iterator() 获取枚举元素的顺序迭代器,来定义和遍历他们。...每一个枚举元素都有一个默认的 __toString(): string实现返回元素的名称。 每个枚举元素返回其相反的元素。 回顾一下,常量不是枚举枚举不是常量。每个枚举定义一个类型。

1.5K30

听GPT 讲Rust Cargo源代码(6)

列表是一个包含多个,每个由逗号分隔。ConfigList继承了ConfigKey,并添加了特定于列表的元数据,例如最小长度、最大长度等。...它有两个枚举:Some(T)表示配置文件中存在某个,None表示配置文件中不存在该。 KeyKind: 这是一个枚举类型,表示配置文件中的类型。...它有多个枚举,如Bool、String等,每个枚举表示不同的类型。 bool: 这是一个基本的布尔类型枚举,表示配置文件中的布尔。...Profiler结构体从顶层管理性能分析的操作,Span用于表示一个时间段,Frame用于构建Span的调用堆栈,Msg用于记录与Span相关的日志消息。...DependencyStatus(依赖状态)是一个枚举,表示了依赖关系的状态。它包含了以下几个: Transitive: 表示依赖是通过其他依赖间接引用的,不是直接被项目依赖的。

7710

JavaScript中的四种枚举方式

当一个变量有一个来自有限的预定义常量的时,使用枚举是很方便的。枚举使你不必使用魔法数字和字符串(这被认为是一种反模式)。 让我们看看在JavaScript中创建枚举的四种好方法(及其优缺点)。...在JavaScript中创建枚举的一个简单方法(虽然不是最理想的)是使用一个普通的JavaScript对象。...优缺点 普通的对象枚举之所以吸引人,是因为它很简单:只要定义一个带有的对象,枚举就可以了。 但是在一个大的代码库中,有人可能会意外地修改枚举对象,这将影响应用程序的运行。...基于类的枚举比较是基于实例的(不是在普通、冻结或代理枚举的情况下的原始比较): class Sizes { static Small = new Sizes('small') static Medium...然后在创建超过3个实例时抛出一个错误。 当然,最好让你的枚举实现尽可能的简单。枚举的目的是为了成为普通的数据结构。 总结 在JavaScript中,有4种创建枚举的好方法。

27240

Enum源码解析

我们使用枚举,很多场合会用到该枚举的字串符表达,上述的实现中只能得到一个数字,不能直观地表达该枚举常量的含义。当然也可用 String 常量,但是又会带来性能问题,因为比较要依赖字符串的比较操作。...使用 enum 来表示枚举可以更好地保证程序的类型安全和可读性。 enum 是类型安全的。除了预先定义的枚举常量,不能将其它的赋给枚举变量。这和用 int 或 String 实现枚举很不一样。...请注意,当使用枚举类型作为集合的类型或映射中的的类型时,可以使用专门且高效的set和map实现。...大多数程序员应该使用toString方法不是访问此字段。...* * 请注意,对于特定枚举类型T , * 可以使用枚举上隐式声明的public static T valueOf(String)方法, * 不是使用此方法将名称映射到相应的枚举常量

1.1K10

【TS 演化史 -- 13】字符串枚举 和 弱类型(Weak Type)探测

字符串枚举 TypeScript 2.4 实现了最受欢迎的特性之一:字符串枚举,或者更精确地说,带有字符串成员的枚举。...对于字符串枚举成员,此映射对象定义从的映射,反之则不是: var MediaTypes; (function (MediaTypes) { MediaTypes["JSON"] = "application...,但不能通过解析一个 MediaTypes["JSON"]; // "application/json" MediaTypes["application/json"]; // undefined...相反,它将内联所有使用站点上每个枚举成员的,从而可能节省一些字节和属性访问间接性的开销: fetch("https://example.com/api/endpoint", { headers...这样,类型错误就出现在咱们(错误地)定义semicolons 属性的地方,不是将prettierConfig参数传递给createFormatter函数的行中。

1.6K10

滚雪球学Java(20):Java泛型与枚举:提升代码灵活性与可读性

枚举则可以定义一组有限的常量,并且可以为每个常量添加行为和属性。  本文将着重介绍Java中的泛型和枚举的概念和使用方法,并通过源代码解析和应用场景案例,对其进行深入探讨。...通过泛型,我们可以在编写代码时使用抽象的类型,不需要具体指定类型的实现。这样可以增加代码的灵活性和可读性。  枚举是一种特殊的数据类型,它可以定义一组有限的常量,并且可以为每个常量添加行为和属性。...构造方法Pair(K key, V value)用于创建一个键值对对象,接受一个和一个作为参数。getKey()方法用于获取,getValue()方法用于获取值的。  ...然后在main方法中,我们创建了一个Pair对象,并传入了一个String类型的和一个Integer类型的。  ...最后,我们将分别打印出来。  这个例子展示了使用泛型类的好处,它允许我们在创建对象时指定不同的类型参数,从而使代码更加灵活和可重用。

8321

开发中巧用Enum枚举类型

在实际开发中,在数据库表设计中,我们往往习惯于用一个Int类型的State字段去表示数据的状态,这个字段很方便去表示这条数据的状态,但是又不愿意去建一张这个State字段的外表去解释状态。...但是我习惯于用一个Enum枚举去规范数据库去所有的State字段,Enum的使用,也更利于开发,可以分别对枚举注释,约定可以呈现在开发人员眼前,不是直接凭空约定。下面分享一下我对Enum类的使用。...,开发者在使用枚举时一般都不会用到红色部分Description属性,它在System.ComponentModel命名空间下 有了它,我们完全可以不用以前使用的switch...case方法去释义或显示中文.../// /// 根据返回枚举对应的内容 /// 创建人:Porschev /// 创建时间:2011-7-19.../// /// 根据返回枚举对应的内容 /// 创建人:Porschev /// 创建时间:2011-7-19

86970

Object对象

使用现有的对象来提供新创建的对象的__proto__。...propertiesObject: 可选,如果指定为一个对象,则是要添加到新创建对象的不可枚举(默认)属性对象的属性描述符以及相应的属性名称,即其自身定义的属性,不是其原型链上的枚举属性,这些属性对应...返回被冻结的对象的引用,是返回传递的对象,不是创建一个被冻结的副本。...Object.values Object.values()方法返回一个给定对象自身的所有可枚举属性的数组,的顺序与使用for in循环的顺序相同,区别在于for in循环还会枚举原型链中的属性。...isPrototypeOf()与instanceof运算符不同,在表达式object instanceof AFunction中,object的原型链是针对AFunction.prototype进行检查的,不是针对

2.3K10

听GPT 讲Rust源代码--compiler(35)

它提供了一种方式来将其他类型转换为与LocalCrate结构体相关的类型,以便在查询系统中使用。 通过这些结构体定义,文件中的Trait提供了一种机制来创建并操作不同类型的查询。...这些Trait包括: Key:作为查询类型必须实现的Trait。它定义了查询的行为,包括如何计算的哈希、与其他比较等。...这些函数包括创建查询、执行查询、检查查询依赖等。 QuerySystem: 这个结构体是查询系统的核心实现,包含了查询缓存、查询缓存等重要的数据结构和算法。...它们通过使用缓存、定义查询和执行查询函数等方式,实现了查询的高速执行和结果的重用。...它具有以下重要字段: Provenance结构体记录了指针的创建和转移,使得可以在执行过程中进行指针来源的追踪和判断。

9810

Java--集合类之Collection与Map

映射(Map):一系列“”对(这已在散列表身上得到了充分的体现)。从表面看,这似乎应该成为一个“”对的“集合”,但假若试图按那种方式实现它,就会发现实现过程相当笨拙。...只需创建一个集合,然后用它表示那一部分即可。这样一来,Map 就可以返回自己的一个Set、一个包含自己的List 或者包含自己“”对的一个List。...EnumSet: EnumSet中所有key都必须是单个枚举类的枚举创建EnumSet时必须显式或隐式指定它的枚举类; EnumSet内部以数组形式保存,所以这种形式非常紧凑、高效; EnumSet...EnumMap: EnumMap中所有key都必须是单个枚举类的枚举创建EnumMap时必须显式或隐式指定它的枚举类; EnumMap内部以数组形式保存,所以这种形式非常紧凑、高效; EnumMap...根据key的自然排序(即枚举枚举类中的定义顺序)来维护键值对顺序; EnumMap不允许使用null作为key,但允许使用null作为value。

88880

枚举类型

这里的限制指的是对枚举类型所能创建的对象的个数进行了限制!他不像普通的class类那样可以创建无数的对象,他只能创建固定数目的对象,而且这些对象是在定义枚举类型的时候就已经在枚举类内部创建好了的!...(2)、枚举常量值的书写要遵循Java标识符的规范,一般都是全部大写。 ​ (3)、定义的枚举枚举之间用“,”隔开,定义完所有的枚举之后要加";"。 ​...我们不能再用枚举类继承其他的类,但可以用枚举实现接口。...{ public abstract void method(); } //方式二 //枚举类不实现抽象类中的方法,让每个枚举常量以==匿名内部类==的方式实现 public enum Week...static void main(String[] args) { //创建EnumMap集合 //:Week枚举常量 //:对该常量的字符串描述

78910

【小家Java】深入理解Java枚举类型(enum)及7种常见的用法(含EnumMap和EnumSet)

因此我加入之后,迅速全面引入枚举类型,并且指定枚举使用规范、统一实现的接口。。。...注意EnumMap的key不能为null,虽说是枚举专属集合,但其操作与一般的Map差不多,概括性来说EnumMap是专门为枚举类型量身定做的Map实现,虽然使用其它的Map(如HashMap)也能完成相同的功能...它有三个构造函数: //创建一个具有指定类型的空枚举映射。...EnumMap(Class keyType) //创建一个其类型与指定枚举映射相同的枚举映射,最初包含相同的映射关系(如果有的话)。 EnumMap(EnumMap<K,?...(一般可以使用接口进行强制规范) 枚举类型对象之间的比较,是可以使用==,直接来比较,是否相等的,不是必须使用equals方法的哟。 并且,强烈建议使用==,效率更高

2.8K31
领券