首页
学习
活动
专区
工具
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.5K20

枚举学不懂,小代老师带你深入理解枚举

1 枚举类型 1.1枚举声明 枚举类型的声明 枚举顾名思义就是⼀⼀列举。 把可能的取值⼀⼀列举。...{}的内容是枚举类型的可能取值,也叫 枚举常量 。 这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。...1.2 枚举类型的优点 为什么使⽤枚举? 我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举枚举的优点: 1. 增加代码的可读性和可维护性 2....枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤ 第5条如上图:枚举如果是局部变量只能在局部使用。...在C语⾔是可以的,但是在C++是⾏的,C++的类型检查⽐ 较严格。

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

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

    51120

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

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

    11410

    【C语言】联合和枚举

    一、联合体 1、联合体类型的声明 联合体的定义与结构体相似,但是联合体往往会节省更多的空间,它的特点是所有成员共用一块内存空间,结构体也叫共用体 联合体给某一成员赋值,其他成员值往往会跟着变化 #include...1、枚举声明 枚举就是一一列举的意思,枚举用enum来定义,定义方法也是类似结构体与联合体的方式 enum Day//星期 { Mon, Tues, Wed, Thur, Fri, Sat...#define也可以完成枚举这样的效果,那为什么我们还要使用枚举呢?...①增强代码的可读与可维护性 ②和#define相比枚举有类型检查,更加安全严谨 ③便于调试,在预处理阶段,会删除#define定义的符号,直接用所替换的值替换,导致预处理与真实代码统一,无法更好地调试...④使用方便,一次可以定义多个常量 ⑤枚举遵循作用域规则,枚举声明在函数内,只能在函数内使用 3、枚举类型的使用 enum Day { Mon, Tues, Wed, Thur, Fri,

    7010

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

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

    41310

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

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

    22110

    Oracle Java类和对象

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

    87400

    自定义类型: 联合体和枚举

    枚举类型 2.1 枚举类型的声明 枚举顾名思义就是⼀⼀列举。 把可能的取值⼀⼀列举。...{}的内容是枚举类型的可能取值,也叫 枚举常量 。 这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。...enum Color//颜⾊ { RED=2, GREEN=4, BLUE=8 }; 2.2 枚举类型的优点 为什么使⽤枚举? 我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举?...便于调试,预处理阶段会删除 #define 定义的符号 使⽤⽅便,⼀次可以定义多个常量 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤ 2.3 枚举类型的使用 举个栗子: enum Color...在C语⾔是可以的,但是在C++是⾏的,C++的类型检查⽐较严格。 完

    9810

    C语言:深入了解(联合体和枚举

    联合体输出的结果为什么是4呢? 联合体的特点 联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合 ⾄少得有能⼒保存最⼤的那个成员)。...枚举类型声明 枚举顾名思义就是⼀⼀列举。...z5,//周5 z6,//周6 z7 //周7 }; enum r//性别 { nan, nv, bm }; enum e//颜色 { RED, GREEN, BLUE }; 下面这枚举我们可以看到赋值的话...,是从0开始的 赋值的话可以打印赋值的数值 给其中一个赋值的话后面的都会递增1 枚举类型的优点 为什么使⽤枚举 我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举 枚举的优点: 1....枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤ 枚举类型的使用 //打印菜单 cd() { printf("***************************\n"); printf

    8110

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

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

    96420

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

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

    1.8K20

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

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

    1.6K10

    【C语言篇】自定义类型:联合体和枚举详细介绍

    枚举类型的声明 枚举顾名思义就是⼀⼀列举。...{}的内容是枚举类型的可能取值,这些都是常量,也叫枚举常量 。 这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。...我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举枚举的优点: 增加代码的可读性和可维护性 和#define定义的标识符⽐较,枚举有类型检查,更加严谨。...enum Sex sex2 = FEMALE; return 0; } 注意:以上例子在C语⾔是可以的,但是在C++是⾏的,C++的类型检查更严格 便于调试,预处理阶段会删除 #...define 定义的符号 使⽤⽅便,⼀次可以定义多个常量 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤ 枚举的使用 增加可读性例子如下: #include <stdio.h

    9110

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

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

    10110

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

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

    83510

    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语言入门到精通

    1K128
    领券