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

为什么不能在方法中本地声明枚举?

在方法中本地声明枚举的原因是为了保持代码的整洁和可读性。枚举是一种数据类型,用于表示一组固定的常量值。在方法中本地声明枚举可以使代码更具可读性,因为它们只在该方法中使用,而不是在整个类中使用。这样可以避免污染类的命名空间,并使代码更易于理解和维护。

例如,假设我们有一个名为 calculateTax 的方法,它需要根据不同的税率计算税收。我们可以在该方法中本地声明一个枚举,如下所示:

代码语言:java
复制
public double calculateTax(double income) {
    enum TaxBracket {
        BRACKET_1(0, 10000, 0.1),
        BRACKET_2(10001, 20000, 0.15),
        BRACKET_3(20001, 30000, 0.2),
        BRACKET_4(30001, Double.MAX_VALUE, 0.25);

        private final double min;
        private final double max;
        private final double rate;

        TaxBracket(double min, double max, double rate) {
            this.min = min;
            this.max = max;
            this.rate = rate;
        }

        public double getMin() {
            return min;
        }

        public double getMax() {
            return max;
        }

        public double getRate() {
            return rate;
        }
    }

    double tax = 0.0;
    for (TaxBracket bracket : TaxBracket.values()) {
        if (income > bracket.getMin() && income <= bracket.getMax()) {
            tax += (bracket.getMax() - bracket.getMin()) * bracket.getRate();
        }
    }

    return tax;
}

在这个例子中,我们在 calculateTax 方法中本地声明了一个名为 TaxBracket 的枚举,该枚举用于表示不同的税收等级。这样,我们可以在方法中使用该枚举,而不必在整个类中使用它。这使得代码更具可读性,并且更容易理解和维护。

总之,本地声明枚举的原因是为了保持代码的整洁和可读性。这种做法可以使代码更易于理解和维护,并避免污染类的命名空间。

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

相关·内容

关于 java 的 set,get方法,而为什么推荐直接使用public

这里引入其中的一句话: 在任何相互关系,具有关系所涉及的各方都遵守的边界是十分重要的事情,当创建一个类库时,就建立了与客户端程序员之间的关系,他们同样也是程序员,但是他们是使用你的类库来构建应用...即使你希望客户端程序员不要直接操作你的类的某些成员,但是如果没有任何访问控制,将无法阻止此事发生。所有的东西都将赤裸裸的暴露在世人面前。...补充说明,set字面意思设置,get获取,我们了解一下java面向对象编程的封闭性与安全性,private 修饰的set get方法方法封闭在了一个特定类,其他类就无法对其变量进行方法,这样就提高了数据的安全性

1.4K20

记一次 C++ 核心语言标准中一个 issue 的发现和提交经历

One-definition rule 阻止枚举量的重复定义 出于好奇,查找了一下 C++ 关于这方面的规定,了解到 C++ ,有一个单独列出的 One-definition rule 条目(6.3...由于定义是一种特殊的声明,虽然定义 definition 相关的规则没能阻止例子的代码通过编译,但是仍然有可能在声明 declaration 阻止了这样重复声明枚举量的情况出现,故继续探寻,发现:...两次 ee 声明的是同一实体为什么重要呢?...而前面一段已经说明了,两次 ee 声明,指向的是同一实体,也就是说这里「可能冲突」的规则并不适用,两次声明冲突。 结论:枚举量重复定义违反 C++ 标准!...应该会在下一次委员会会议讨论并可能在未来草案修复。

48420

C语言——N自定义类型:联合和枚举

1、枚举类型的声明 ⽐如我们现实⽣活: ⼀周的星期⼀到星期⽇是有限的7天,可以⼀⼀列举 性别有:男、⼥、保密,也可以⼀⼀列举 ⽉份有12个⽉,也可以⼀⼀列举 三原⾊,也是可以意义列举 这些数据的表示就可以使...{ }的内容是枚举类型的可能取值,也叫 枚举常量 。 这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。...enum Color//颜⾊ { RED = 2, GREEN = 4, BLUE = 8 }; 2、枚举类型的优点 为什么使用枚举?...枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤。...在C语⾔是可以的,但是在C++是⾏的,C++的类型检查⽐较严格。

8010

【C语言】一篇文章深入解析联合体和枚举且和结构体的区别

为什么使⽤枚举?...我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举?...便于调试,预处理阶段会删除 #define 定义的符号 使⽤⽅便,⼀次可以定义多个常量 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤ 枚举类型的使⽤ 那是否可以拿整数给枚举变量赋值呢...在C语⾔是可以的,但是在C++是⾏的,C++的类型检查⽐较严格。 在C语言中,枚举类型实际上就是整数类型,编译器会把枚举常量替换成对应的整数值。所以可以用整数直接给枚举变量赋值。...然后进行相同成员的结构体和联合体对⽐,⼤⼩的计算,联合体应用,枚举类型的声明,优点和扫雷改造使⽤方法,阿森将下一节和你一起学习动态内存管理 。

16510

C语言:自定义类型——联合和枚举

二、枚举类型 2.1 枚举类型的声明 枚举顾名思义就是⼀⼀列举。 把可能的取值⼀⼀列举。...⽐如我们现实⽣活: ⼀周的星期⼀到星期⽇是有限的7天,可以⼀⼀列举 性别有:男、女、保密,也可以⼀⼀列举 ⽉份有12个⽉,也可以⼀⼀列举 三原⾊,也是可以意义列举 { }枚举类型的可能取值,也叫做枚举常量...这些可能取值本身都是由值的,默认是从0开始依次递增1,当然我们在声明的时候也可以自己赋初值,但是定义完成之后,就不能在该类型的外部去修改了!!...、枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤ 枚举有作用域的概念,在一个函数内部使用,出了函数就不能用了,但是#define定义的标识符没有作用域概念,他是一个全局都可以使用的常量。...2.3 枚举类型的使用 使用方法:使⽤枚举常量给枚举变量赋值 那是否可以拿整数给枚举变量赋值呢? 在C语⾔是可以的,但是在C++是⾏的,C++的类型检查⽐ 较严格。

9510

Oracle Java类和对象

); 序列化 强烈建议序列化内部类,包括本地类和匿名类。...本地和匿名类 还有两种额外类型的内部类。可以在方法声明内部类。这些类称为本地类。您还可以在方法声明内部类,而不必命名该类。这些类称为匿名类。...() == numberLength) 从JavaSE8开始,如果在方法声明本地类,它可以访问该方法的参数。...匿名类对其成员也有与本地类相同的限制: 不能在匿名类声明静态初始化器或成员接口。 匿名类可以有静态成员,前提是它们是常量变量。...Java编程语言枚举类型比其他语言中的枚举类型强大得多。枚举声明定义了一个类(称为枚举类型)。枚举类主体可以包括方法和其他字段。编译器在创建枚举时自动添加一些特殊方法

70900

5年前, 以太坊大脑送给V神一份神秘大礼; 今天, V神将它给了你...

^字符除了提供的主版本号之外针对任何其他主版本。 Solidity文件只能用主版本号为4的编译器进行编译,不能在其他主版本号的编译器上编译。...私有状态变量只能在声明它们的合约中使用。即使在派生合约也不能使用它们。...在函数声明的引用类型不会被覆盖,应该始终指向一个状态变量。 在函数声明的值类型变量不能被覆盖,也不能存储在存储位置。 映射总是在存储位置声明,这意味着不能在函数内声明它们。...不能在函数内声明枚举,并在合约的全局域命名空间内声明。 预定义的常量是连续赋值的,从零开始增加整数值。...可以使用计数器执行循环,并可以将映射中的每个值提取并存储到本地数组,如下图所示: ? 只能将映射声明为 storage 类型的状态变量。不能在函数内将映射声明为内存映射。

1.7K20

MQL5从入门到精通【第二章】变量与数据类型(四)

输入变量由input关键字声明。放置在程序顶部,在所有程序代码和任意函数之前定义。输入变量可以是任意类型,包括枚举。但是数组和结构体不能用于输入变量。输入变量命名应遵循整洁,富有描述性的特点。...= 20; input string Comment = "ea"; 上述输入变量设置周期,移动平均线的计算方法,设置了订单的止损价和描述信息。...静态输入变量可以用sinput关键词声明。静态输入变量的值可以修改,但是在策略测试不可优化。静态输入变量仅在输入参数的逻辑组合上有些意义。...# 局部变量 Local Varables 本地变量,或局部变量,是定义在一个function内的变量,函数首次运行时,分配内存空间。函数一旦退出,变量也就从内存销毁了,这很好理解。...,下面用判断语句了,循环语句了,游刃有余,可以随意使用,再也担心了。

81720

中高级Java开发面试题,最难的几道Java面试题,看看你跪在第几个

为什么枚举单例在 Java 更好 枚举单例是使用一个实例在 Java 实现单例模式的新方法。...这篇文章是关于为什么我们应该使用Eeame作为Java的单例,它比传统的单例方法相比有什么好处等等。 Java 枚举和单例模式 Java 枚举单例模式是使用枚举在 Java 实现单例模式。...如果你不相信, 那就比较一下下面的传统双检查锁定单例和枚举单例的代码: 在 Java 中使用枚举的单例 这是我们通常声明枚举的单例的方式,它可能包含实例变量和实例方法,但为了简单起见,我没有使用任何实例方法...---- ,你不能在Java覆盖静态方法,但在子类声明一个完全相同的方法不是编译时错误,这称为隐藏在Java方法。...虽然可以在子类声明一个具有相同名称和方法签名的方法,看起来可以在Java覆盖静态方法,但实际上这是方法隐藏。

1.5K10

【C】结构体+自定义类型知识点大全(基础,进阶,简洁,全面)

) strcut Book SB3={.price=20};//单独创建(按顺序创建,直接索引) 不能直接修改成员列表的数组,要用strcpy!!...平台原因(移植原因) 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。...,不确定储存方向,有可能截断/整型提升); 位段涉及很多不确定因素,位段是跨平台的,注重可移植的程序应该避免使用位段; 场景引入:为什么使用位段后,A的大小从16变为8?...位段的不确定性/跨平台问题 int位段是signed int 还是 unsigned int ,不确定 位段中最大位的数目不确定(16位机器最大16,32位机器最大32;如写成27,在16位机器中会出问题) 位段成员在内存从左向右分配...2.枚举相较于#define的优点 我们可以用#define定义常量,为什么非要使用枚举

6910

.NET面试题解析(05)-常量、字段、属性、特性与委托

为什么?...C#的委托都继承自System.Delegate类型; 委托类型的声明方法签名类似,有返回值和参数; 委托是一种可以封装命名(或匿名)方法的引用类型,把方法当做指针传递,但委托是面向对象、类型安全的...这是为什么呢? 上面的代码的Action就是.NET为我们定义好的一个无参数无返回值的委托,从上一节我们知道委托实质是一个类,理解这一点是解决本题的关键。...const必须在声明的同时赋值;readonly即可以在声明处赋值,也可以在构造方法里赋值。  2、修饰对象不同。...C#的委托都继承自System.Delegate类型; 委托类型的声明方法签名类似,有返回值和参数; 委托是一种可以封装命名(或匿名)方法的引用类型,把方法当做指针传递,但委托是面向对象、类型安全的

80910

C++枚举类型

C++枚举类型 在C++,如果一个变量只有几种可能的值,可以定义为枚举类型。枚举是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。  C++声明枚举类型用enum开头。...花括号Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday称为枚举元素或枚举常量,表示这个类型的变量的值只能是以上7个值之一,它们是用户自己定义的标识符...C++声明枚举类型的一般形式为 enum 枚举类型名 {枚举常量表列}; C++在声明枚举类型之后,可以用声明枚举来定义变量。...学过C语言的读者应该知道,枚举类型名包括关键字enum,但是在C++中允许写enum,一般也写enum,但保留了C语言的用法。 ...C++可以在声明枚举类型时另行指定枚举元素的值。 C++枚举值可以用来做判断比较。 C++中一个整数不能直接赋给一个枚举变量。 10.1 C++枚举类型 更多案例可以go公众号:C语言入门到精通

975128

.NET面试题解析(05)-常量、字段、属性、特性与委托

为什么?...C#的委托都继承自System.Delegate类型; 委托类型的声明方法签名类似,有返回值和参数; 委托是一种可以封装命名(或匿名)方法的引用类型,把方法当做指针传递,但委托是面向对象、类型安全的...这是为什么呢? 上面的代码的Action就是.NET为我们定义好的一个无参数无返回值的委托,从上一节我们知道委托实质是一个类,理解这一点是解决本题的关键。...const必须在声明的同时赋值;readonly即可以在声明处赋值,也可以在构造方法里赋值。 2、修饰对象不同。...C#的委托都继承自System.Delegate类型; 委托类型的声明方法签名类似,有返回值和参数; 委托是一种可以封装命名(或匿名)方法的引用类型,把方法当做指针传递,但委托是面向对象、类型安全的

99320

GC的前置工作,聊聊GC是如何快速枚举根节点的

当然要成为GC Roots是有条件的,固定可作为GC Roots的对象包括以下几种(摘抄自《深入理解虚拟机 第3版》): 在虚拟机栈(栈帧本地变量表)引用的对象,譬如各个线程被调用的方法堆栈中使用到的参数...在方法区中常量引用的对象,譬如字符串常量池(String Table)里的引用。 在本地方法JNI(即通常所说的Native方法)引用的对象。...上面说的这些,大伙肯定记不住,反正总结就一句话:固定可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧本地变量表)。...根节点枚举必须在一个能保障一致性的快照才得以进行——这里「一致性」的意思是整个枚举期间执行子系统看起来就像被冻结在某个时间点上。 为什么要这么做?...那样当这段时间里虚拟机要发起垃圾收集时就不必去管这些已声明自己在安全区域内的线程了。 当线程要离开安全区域时,它要检查虚拟机是否已经完成了根节点枚举(或者垃圾收集过程其他需要暂停用户线程的阶段)。

13530

自定义类型:结构体,枚举,联合

/匿名结构体类型 struct { int a; char b; float c; }x; struct { int a; char b; float c; }a[20], *p;  如此声明定义只能在定义时...枚举 枚举顾名思义就是一一列举。 把可能的取值一一列举。 比如我们现实生活: 一周的星期一到星期日是有限的7天,可以一一列举。 月份有12个月,也可以一一列举 这里就可以使用枚举了。...{ }的内容是枚举类型的可能取值,也叫 枚举常量 。 这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。...例如: enum Color//颜色 { RED=1, GREEN=2, BLUE=4 }; 3.2 枚举的优点  为什么使用枚举?...我们可以使用 #define 定义常量,为什么非要使用枚举枚举的优点: 1. 增加代码的可读性和可维护性 2. 和#define定义的标识符比较枚举有类型检查,更加严谨。 3.

49610

Java 注解 Annotation

@Retention @Retention Annotation声明注解的生命周期,生命周期包括3 SOURCE、CLASS、RUNTIME 定义 Retention ?...、接口、枚举、注解 上使用 ElementType.FIELD:只能在字段、枚举的常量上使用 ElementType.METHOD:只能在方法上使用 ElementType.PARAMETER:只能在方法参数上使用...:只能在注解上使用 ElementType.PACKAGE:只能在包上使用 ElementType.TYPE_PARAMETER:只能在在 Type 的声明式前面 public <@TypeAnnotation...但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档。 4....用于标注属性、方法、类等 已经过时,推荐使用,下一个版本可能会删除掉。 3. @SuppressWarnings ? 代码在开发工具,可能会出现警告提示,使用该注解可以抑制编译器的注解。

746130

java枚举类解读

为什么需要枚举类 类的对象只有有限个,确定的。举例如下:  星期:Monday(星期一)、.........私有化类的构造器,保证不能在类的外部创建其对象 2. 在类的内部创建枚举类的实例。声明为:public static final 3....对象如果有实例变量,应该声明为private final,并在构造器初始化 class Season{ private final String SEASONNAME;//季节的名称...列出的实例系统会自动添加 public static final 修饰 必须在枚举类的第一行声明枚举类对象 JDK 1.5 可以在 switch 表达式中使用Enum定义的枚举类的对象作为表达式...switch(枚举类名){ case 枚举对象名: break; … }  向枚举添加新方法 如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个"分号"。

16940

10个最难回答的Java面试题

为什么枚举单例在 Java 更好 枚举单例是使用一个实例在 Java 实现单例模式的新方法。...这篇文章是关于为什么我们应该使用Eeame作为Java的单例,它比传统的单例方法相比有什么好处等等。 Java 枚举和单例模式 Java 枚举单例模式是使用枚举在 Java 实现单例模式。...如果你不相信, 那就比较一下下面的传统双检查锁定单例和枚举单例的代码: 在 Java 中使用枚举的单例 这是我们通常声明枚举的单例的方式,它可能包含实例变量和实例方法,但为了简单起见,我没有使用任何实例方法...,你不能在Java覆盖静态方法,但在子类声明一个完全相同的方法不是编译时错误,这称为隐藏在Java方法。...虽然可以在子类声明一个具有相同名称和方法签名的方法,看起来可以在Java覆盖静态方法,但实际上这是方法隐藏。

77820
领券