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

为什么我不能增加枚举类型的变量?

枚举类型是一种特殊的数据类型,用于定义一组具有相同特征的常量。它可以限定变量的取值范围,提高代码的可读性和可维护性。然而,为什么不能增加枚举类型的变量呢?

首先,枚举类型在定义时就确定了其取值范围,这些取值被称为枚举常量。枚举常量是在编译时期就确定的,无法在运行时期进行修改或增加。这是因为枚举类型的取值是预先定义好的,代表了一组固定的选项,不可随意扩展。

其次,枚举类型的设计初衷是为了提供一种简洁、清晰的方式来表示一组相关的常量。它的目的是为了增加代码的可读性和可维护性,而不是为了提供一种动态增加取值的能力。如果允许增加枚举类型的变量,就会破坏了枚举类型的固定性和可预测性,导致代码变得混乱和难以理解。

最后,如果需要表示一组可变的选项,可以考虑使用其他数据结构,如数组、集合或数据库等。这些数据结构可以动态地增加、删除和修改元素,以满足不同的需求。

总结起来,不能增加枚举类型的变量是因为枚举类型的取值是预先定义好的,无法在运行时期进行修改或增加。枚举类型的设计初衷是为了提供一种简洁、清晰的方式来表示一组相关的常量,而不是为了提供动态增加取值的能力。如果需要表示一组可变的选项,可以考虑使用其他数据结构。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么阿里强制 boolean 类型变量不能使用 is 开头?

,后者是包装类,为什么不推荐使用isXXX来命名呢?...到底是用基本类型数据好呢还是用包装类好呢?...规范中对这些均有相应规定,基本数据类型属性,其getter和setter方法是getXXX()和setXXX,但是对于基本数据中布尔类型数据,又有一套规定,其getter和setter方法是isXXX...工作中使用基本类型数据好还是包装类好 咱们举个例子,一个计算盈利系统,其盈利比例有正有负,若使用了基本类型bouble定义了数据,当RPC调用时,若出现了问题,本来应该返回错误,但是由于使用了基本类型...其实阿里java开发手册中对于这个也有强制规定: 因此,这里建议大家POJO中使用包装数据类型,局部变量使用基本数据类型

78820

Java中static用法,static、public为什么不能修饰局部变量?

人为规定,记住就好。 其实这些变量都之所以叫局部变量,其作用域也只限于声明它方法体内。在方法被调用时,这些局部变量获得内存空间,到方法执行结束时,他们所占据内存空间就被释放。 用完就释放。...静态变量在类加载时候创建,随着类消失而消失。 2.调用方式不同 成员变量只能被对象调用。 静态变量能被对象调用,也能被类名调用。 3.别名不一样 成员变量叫实例变量。...静态变量叫类变量。 4.数据存储不一样 成员变量储存在堆内存对象中,也叫对象特有数据。 静态变量储存在方法区静态区,所有也叫对象共享数据。...静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量。当然静态可以访问静态,非静态可以访问非静态。...可以直接通过类名来访问,访问语法为: 类名.静态方法名(参数列表…) 类名.静态变量名 static代码块 static代码块在jvm加载类时候会自动执行,但是static代码块不能在方法内

2.6K10

为什么说“单元素枚举类型已经成为实现Singleton最佳方法”

预计阅读时间:10分钟 Joshua Bloch大神在《Effective Java》中明确表达过观点:使用枚举实现单例方法虽然还没有广泛采用,但是单元素枚举类型已经成为实现Singleton...最佳方法。...有,可以使用枚举方式,Joshua Bloch大神也在《Effective Java》中明确支持此种方式,如下: public enum Singleton { INSTANCE;...不止简单,还成功避免了上述问题,而且能保证在反序列化时候不会生成新实例对象,以下是枚举方式反编译(使用javap命令)字节码: javap Singleton.class Compiled from...如上,会报错,而且目前没有任何方法能绕过该限制,以下是jdknewInstance方法源代码,如果是ENUM类型则不允许使用反射(红色标注部分),看到这里大家应该明白为什么枚举方式能保证单例实例安全

1.2K40

为什么要创建一个不能被实例化

但如果有一天,你发现写了这样一个类: class People: def say(self): print(f'叫做:{self.name}') def __new...一个不能被初始化类,有什么用? 这就要引入我们今天讨论一种设计模式——混入(Mixins)。 Python 由于多继承原因,可能会出现钻石继承[1]又叫菱形继承。...显然,这样写会报错,因为两个类实例是不能比较大小: 但在现实生活中,当我们说 某人比另一个人大时,实际上是指某人年龄比另一人年龄大。...最后,我们对比一下抽象类(Abstract Class)、接口(Interface)和混入(Mixins)区别: 抽象类: 包含一个或多个抽象方法。 允许包含状态(实例变量)和非抽象方法。...混入: 不能包含状态(实例变量)。 包含一个或多个非抽象方法。 参考资料 [1]钻石继承: https://en.wikipedia.org/wiki/Multiple_inheritance

3.4K10

用编程模拟疫情传播来告诉你: 为什么现在你还不能出门

看完视频你就明白为什么不能出门了,千万不要放松警惕!(@Ele实验室 ) 在家憋了一段时间的人们,耐心也在一点一点消磨中。很多人已经忍不住开始想蠢蠢欲动了。...他们总有一套自己理论:我们城市才一点确诊病人,而且在距离我们很远地方,就出去一会儿,哪有那么巧合,就感染上了。没事儿!大街上都没人,戴着口罩又没事。...疫情防控工作防控点或者是成功与否主要在于感染人员是否戴口罩、医院里隔离床位(或者是自我隔离位)、人口流动。...因此通过这一次疫情防控,为了你、、他,请以后感冒发烧生病之后,能够带个口罩,减少传染率。因为不知道你体内这一个病毒威力如何。 ?...因此一个疫情发生,必须依靠强大有力政府比如中国,和广大医院医生护士等伟大工作者们努力,所以平时请尽量尊重他们这个职业。 ?

2K10

为什么Java中类成员变量不能被重写?成员变量在Java中能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域方法

Paste_Image.png 按照我们已有的多态概念,第二个应该是输出sub才对,但却输出了super。这是为什么呢?...意思就是: 在一个类中,子类中成员变量如果和父类中成员变量同名,那么即使他们类型不一样,只要名字一样。父类中成员变量都会被隐藏。在子类中,父类成员变量不能被简单用引用来访问。...而是,必须从父类引用获得父类被隐藏成员变量,一般来说,我们不推荐隐藏成员变量,因为这样会使代码变得难以阅读。...其实,简单来说,就是子类不会去重写覆盖父类成员变量,所以成员变量访问不能像方法一样使用多态去访问。...访问隐藏域方法 就是使用父类引用类型,那么就可以访问到隐藏域,就像我们例子中代码 就是使用类型转换System.out.println(((Super)c1).s); 翻译自http://www.programcreek.com

3.5K40

为什么建议线上高并发量日志输出时候不能带有代码位置

如果大家发现网上有抄袭本文章,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~ 本文是“为什么建议”系列第二篇,本系列中会针对一些在高并发场景下,对于组内后台开发一些开发建议以及开发规范要求进行说明和分析解读...往期回顾: 为什么建议在复杂但是性能关键表上所有查询都加上 force index 在业务一开始上线时候,我们线上日志级别是 INFO,并且在日志内容中输出了代码位置,格式例如: 2022-03...模拟两种方式获取调用打印日志方法代码位置,与不获取代码位置会有多大性能差异 以下代码参考 Log4j2 官方代码单元测试,首先是模拟某一调用深度堆栈代码: 然后,编写测试代码,对比纯执行这个代码...可以从 StackWalker 性能优于通过异常获取堆栈,并且随着堆栈深度增加差距越来越明显看出来。 为何会慢?...由此,建议:对于微服务环境,尤其是响应式微服务环境,堆栈深度非常深,如果会输出大量日志的话,这个日志是不能带有代码位置,否则会造成严重性能衰减。

1.4K20

详解Java构造方法为什么不能覆盖,钻牛角尖病又犯了....

三 但是,看了输出,就纳闷为什么为什么第三行不是BigEgg2.Yolk(),不能覆盖吗?...那么,他们构造方法为什么不能覆盖,都是Public Yolk(){}。 当然,网上都说子类继承父类除构造方法以外所有方法,但这是结果,要知道为什么!! 五 先说几个错误观点 1....有说构造方法方法名与类名必须一样,父子类不能同名,故不能继,所以不能覆盖构造方法。 这个不用多说,这个例子,就是大神写出来打这样说的人。 2....(这就是为什么创建子类时先创建完父类原因了) 那么很明显了,要是同名类之间可以覆盖了,子类创建时就是创建了两个自己而没有父类。...Java设计时候,他们绝对想到有些人会像强迫症那样折腾个同名类继承,然后实现构造覆盖场景吧.... 总结 构造方法是唯一不能又造爸爸又造儿子

2K20

【手记】走近科学之为什么明明实现了IEnumerable类型不能调用LINQ扩展方法

比如Json.NETJObject明明实现了IEnumerable,具体来说是IEnumerable>,按说JObject类型对象是可以直接调用...Select、Where等linq扩展方法,但偏偏就是不行,代码如下: using System.Linq; ... var jobj = new JObject(); var xxx = jobj.Select...(x=>x); //报错:JObject未包含Select定义,也不存在第1个参数为JObjectSelect扩展方法... foreach(var x in jobj) { } //可以 var xxx...= ((IEnumerable>)jobj).Select(x=>x); //也可以 究竟是人性扭曲还是道德沦丧?...,等于JObject直接和间接实现了两个不同IEnumerable,当.Select时候编译器不能确定调用哪个类型Select,所以就这样了。

78710

联合体类型枚举类型

而对于枚举常量类型为enum color ,其类型大小也为4个字节 所以对于创建clr变量我们将其赋值是用枚举常量给其赋值。 不能用整数将其赋值,如4,5,6等。...如果换做c++,其类型检查比较严格,所以即使其枚举类型本质是int类型,但其表面还是枚举类型,严格c++就会导致不能用整形赋值到枚举变量上去。...枚举依然能像结构体和联合体一样在;前面创建变量(创建类型同时创建变量) 这大概就是枚举主要知识点,当然它还有更多细节,对于这些细节就不讲了(实在有点多),这里有篇好文推荐下,大家可以去看下C...为什么使⽤枚举?...我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举枚举优点: 1. 增加代码可读性和可维护性 2. 和#define定义标识符⽐较枚举类型检查,更加严谨。

8110

Java枚举细节

(); // Color name is RED } 为什么枚举构造器不能访问枚举静态域 查看下面这段代码: public enum Color { RED, GREEN, BLUE;...构造器无法访问静态变量 } } 我们可以看到这里编译不通过,提示我们枚举构造器不能够访问枚举静态域(以及静态变量)。...看到这里,也许会有点疑问,既然静态域加载优于实例域(包含构造函数),那为什么枚举类中就不行呢?让我们回到前面对枚举反编译,其实答案就出来了。...例如,现在有一个如下Color枚举类,当针对不同Color常量时候,能有一个方式给我返回该颜色十六进制颜色码。...,但是存在问题:枚举常量越来越多,case会不断增长,如果编写代码过程由于不注意,增加颜色常量时候,忘记了增加对应case,那么编译是不会有任何问题,但是却隐含增加颜色常量也返回是BLUE

19720

深入分析Javaenum

name变量就是枚举变量字符串形式。 还有一些其他方法就暂时不介绍了,感兴趣的话可以自己去看看文档或者源码,都挺简单。 要点: 使用是enum关键字而不是class。...你可以定义任何你想要变量。学完了这些,大概枚举类你也应该掌握了,但是,还有没有其他用法呢? 枚举类中抽象类 如果枚举类中定义一个抽象方法会怎么样?...你要知道,枚举不能继承其他类,也不能被其他类继承。至于为什么,我们后面会说到。 你应该知道,有抽象方法类必然是抽象类,抽象类就需要子类继承它然后实现它抽象方法,但是呢,枚举不能被继承。。...为什么一个变量后边可以带一个代码块并且实现抽象方法呢? 别着急,带着这个疑问,我们来看一下枚举实现原理。 枚举实现原理 从最简单看起: ?...并且,这个类是final!所以它不能被继承! 回到我们刚才那个疑问: ? 为什么会有这么神奇代码?现在你差不多懂了。因为RED本身就是一个TrafficLamp对象引用。

1.3K110

Java基础15:深入剖析Java枚举

因此,枚举类型是某类数据可能取值集合,如一周内星期可能取值集合为:   { Sun,Mon,Tue,Wed,Thu,Fri,Sat}   该集合可定义为描述星期枚举类型,该枚举类型共有七个元素,因而用枚举类型定义枚举变量只能取集合中某一元素值...由于枚举类型是导出数据类型,因此,必须先定义枚举类型,然后再用枚举类型定义枚举变量。  ...通常两个不同元素取相同整数值是没有意义枚举类型定义只是定义了一个新数据类型,只有用枚举类型定义枚举变量才能使用这种数据类型。...造方法为什么增加了两个参数? 有一个问题,构造方法我们明明只定义了一个参数,为什么生成构造方法是三个参数呢?...它保证了枚举类型不可变性,不能通过克隆,不能通过序列化和反序列化来复制枚举,这能保证一个枚举常量只是一个实例,即是单例,所以在effective java中推荐使用枚举来实现单例。

65600

深入分析 Java 枚举 enum

name变量就是枚举变量字符串形式。 还有一些其他方法就暂时不介绍了,感兴趣的话可以自己去看看文档或者源码,都挺简单。 要点: 使用是enum关键字而不是class。...你可以定义任何你想要变量。学完了这些,大概枚举类你也应该掌握了,但是,还有没有其他用法呢? 枚举类中抽象类 如果枚举类中定义一个抽象方法会怎么样?...你要知道,枚举不能继承其他类,也不能被其他类继承。至于为什么,我们后面会说到。 你应该知道,有抽象方法类必然是抽象类,抽象类就需要子类继承它然后实现它抽象方法,但是呢,枚举不能被继承。。...为什么一个变量后边可以带一个代码块并且实现抽象方法呢? 别着急,带着这个疑问,我们来看一下枚举实现原理。 枚举实现原理 从最简单看起: ?...并且,这个类是final!所以它不能被继承! 回到我们刚才那个疑问: ? 为什么会有这么神奇代码?现在你差不多懂了。因为RED本身就是一个TrafficLamp对象引用。

1.9K30
领券