1. 问题描述
今天在代码中想对Java switch case 和枚举类型Enum对象进行联合使用,但发现有Eclipse中异常提示信息:case expressions must be constant expressions,导致编译始终过不去。
枚举类型定义如下:
public enum TradeStatus { CLOSE(-1, "已关闭"), NO_TRADE(0, "未创建"), CREATE(1, "拍下"), PAY(2, "已付款"), SHIP(3, "已发货"), SUCCESS(4, "已完成"); private int value; private String name; private TradeStatus(int value, String name) { this.setValue(value); this.setName(name); } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public String getName() { return name; } public void setName(String name) { this.name = name; } public static TradeStatus getByValue(int value) { for (TradeStatus tradeStatus : values()) { if (tradeStatus.getValue() == value) { return tradeStatus; } } return null; } }
使用代码入下:
private String getStatusDesc(Integer tradeStatus) { switch(tradeStatus){ case TradeStatus.CREATE.getValue() : break; default: break; } return "交易状态"; }
2. 原因分析
本意是想对tradeStatus值进行分类过滤,但由于 TradeStatus.CREATE.getValue() 返回值是一个变量不符合Java switch case的语法,导致报错。
接下来修改了代码,如下:
private String getStatusDesc(Integer tradeStatus) { switch (TradeStatus.getByValue(tradeStatus)) { case OrderInfoSearchDO.TradeStatus.CREATE: break; default: break; } return "交易状态"; }
但Eclipse继续提示错误信息:The qualified case label TradeStatus.CREATE must be replaced with the unqualified enum constant CREATE。。。
百思不得其解。
3. 问题解决
把枚举常量前的冗余类信息去掉即可,如下所示:
private String getStatusDesc(Integer tradeStatus) { switch (TradeStatus.getByValue(tradeStatus)) { case CREATE: break; default: break; } return "交易状态"; }
相关推荐
Java枚举类型(Enum)是Java SE 5.0引入的一种新的数据类型,它为开发者提供了更为强大且安全的方式来表示一组常量。枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将...
### JAVA中的枚举类型1:基本用法 #### 一、枚举类型的引入与定义 在Java 5中,枚举类型作为一种新特性被引入,主要用于定义一组固定的、相关的常量集合。通过枚举类型,我们可以更加清晰地组织并限制程序中可用的...
Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...
在Java中,枚举类型本质上是一个特殊的类,它继承自`java.lang.Enum`。这意味着每个枚举常量都是该类的一个实例。尽管枚举类型有一些限制(例如不能派生子类),但它们也提供了许多强大的功能,比如可以拥有构造函数...
在Java编程语言中,枚举(enum)是一种特殊的类,用于定义一组固定的常量。它在许多场景下比使用常量或int类型的硬编码值更安全、更具可读性。本篇文章将深入探讨Java枚举的特性、用法以及如何在实际开发中充分利用...
"Java Enum 枚举学习资料" Java Enum 枚举学习资料是 Java 编程语言中的一种特殊类型,它主要用来实现一组固定的常量。 Enum 枚举类型是 Java 5 中引入的一种新特性,旨在解决传统的 int 枚举常量的缺陷。 1. 枚举...
### C++中的枚举类型(Enum) 在C++编程语言中,枚举(`enum`)是一种用户定义的类型,它由一组具有整数值的命名常量组成。这些值可以被程序用来代替数字,使代码更具可读性,并且能够表示特定范围内的固定集合。 ...
全面掌握 Java 枚举类型(enum type) Java 枚举类型是一种特殊的数据类型,它可以取有限个数的明确值。枚举类型的引入解决了 int 枚举模式和 String 枚举模式的缺点,提供了类型安全性、可读性和性能等优势。 ...
枚举(Enum)在编程语言中是一种非常有用的数据类型,它允许我们定义一组相关的命名常量,便于代码的可读性和维护。在C#中,枚举是通过`enum`关键字来创建的。在给定的示例中,`BoxType`枚举定义了三种箱型:...
Java中的枚举(enum)类型是在JDK 1.5版本引入的一个强大的特性,它用于定义一组相关的常量。在C/C++等语言中,枚举通常用来表示一组具有固定值的常量集合,但在Java中,枚举不仅限于此,它提供了更多的功能和灵活性...
在Java编程语言中,`Enum`(枚举)是一种特殊的类类型,用于定义固定的、预定义的常量集合。它们在程序设计中扮演着重要的角色,特别是在需要表示一组固定值时,如状态、颜色、星期等。本资源包提供了一些关于`Enum`...
Java中的枚举类型`Enum`是面向对象编程中一种强大的工具,它允许程序员定义自己的常量集合。在Java中,枚举类型不是简单的常量数组,而是一种完整的类,具有类的所有特性,如方法、构造函数和继承。下面将详细探讨`...
枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-master"显然是一个用于演示如何通过反射来操作枚举类的示例。 首先,让我们理解枚举类的基本概念。枚举类在Java中用于定义...
### Java 枚举类型 enum 的使用详解 #### 一、枚举类型概述 在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来...
Java枚举类型是Java语言中一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的方式来表示一组有限的值。枚举在Java中被引入为一个完整的类型,不同于C++中的枚举,这使得Java枚举更加强大且易于使用...
std::cout << magic_enum::enum_name(Color::Red) << std::endl; // 输出 "Red" for (auto e : magic_enum::enum_values()) { std::cout (e) ; } // 输出 0 1 2 } ``` 上述代码展示了如何使用`enum_name`函数...
Java 枚举是 Java 语言中的一种特殊类型,自 JDK 5 开始引入,使用 enum 关键字修饰。在 Java 中,枚举是一种受限制的类,具有自己的方法。枚举的本质是 java.lang.Enum 的子类,它提供了一些基本方法,如 values()...
Java高新技术——Java 5的枚举(Enum)基本应用 在Java编程语言中,枚举是一种特殊的类,用于定义一组预定义的常量。自从Java 5引入枚举类型以来,它已经成为处理固定集合常量的首选方式,因为它提供了比传统整数...
Java枚举(enum)是Java语言中的一种特殊数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中被引入,目的是为了更好地管理和使用常量,提高代码的可读性和安全性。在本实例代码中,...
Java中的枚举(enum)是自JDK 1.5版本引入的一种强大的类型,它用于定义一组相关的常量。枚举在Java中被设计为一种特殊的类,它们默认继承自`java.lang.Enum`抽象类,并且是单继承的,这意味着它们无法再继承其他类...