`
nuistcc
  • 浏览: 84204 次
社区版块
存档分类
最新评论

Java switch case 枚举enum报错:case expressions must be constant expressions

阅读更多

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枚举类型(Enum)是Java SE 5.0引入的一种新的数据类型,它为开发者提供了更为强大且安全的方式来表示一组常量。枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将...

    JAVA中的枚举类型1:基本用法.doc

    ### 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 SE程序 Enum枚举类...

    JAVA中的枚举类型2:高级特性.doc

    在Java中,枚举类型本质上是一个特殊的类,它继承自`java.lang.Enum`。这意味着每个枚举常量都是该类的一个实例。尽管枚举类型有一些限制(例如不能派生子类),但它们也提供了许多强大的功能,比如可以拥有构造函数...

    高阶Java-Java枚举类型 enum 应用详解

    在Java编程语言中,枚举(enum)是一种特殊的类,用于定义一组固定的常量。它在许多场景下比使用常量或int类型的硬编码值更安全、更具可读性。本篇文章将深入探讨Java枚举的特性、用法以及如何在实际开发中充分利用...

    枚举enum和switch 的使用

    枚举(Enum)作为编程语言中一种特殊的类型,为开发者提供了一种简洁、清晰的定义一组命名常量的方式。在C#语言中,枚举是通过`enum`关键字定义的,其本质上是一种结构体,与整型(int)紧密相关联,但提供了更丰富...

    java enum 枚举 学习资料

    "Java Enum 枚举学习资料" Java Enum 枚举学习资料是 Java 编程语言中的一种特殊类型,它主要用来实现一组固定的常量。 Enum 枚举类型是 Java 5 中引入的一种新特性,旨在解决传统的 int 枚举常量的缺陷。 1. 枚举...

    C++中枚举类型(enum)

    ### C++中的枚举类型(Enum) 在C++编程语言中,枚举(`enum`)是一种用户定义的类型,它由一组具有整数值的命名常量组成。这些值可以被程序用来代替数字,使代码更具可读性,并且能够表示特定范围内的固定集合。 ...

    全面掌握java枚举类型(enum-type)1

    全面掌握 Java 枚举类型(enum type) Java 枚举类型是一种特殊的数据类型,它可以取有限个数的明确值。枚举类型的引入解决了 int 枚举模式和 String 枚举模式的缺点,提供了类型安全性、可读性和性能等优势。 ...

    java中enum枚举的详细用法

    Java中的枚举(enum)类型是在JDK 1.5版本引入的一个强大的特性,它用于定义一组相关的常量。在C/C++等语言中,枚举通常用来表示一组具有固定值的常量集合,但在Java中,枚举不仅限于此,它提供了更多的功能和灵活性...

    JAVA高级编程中Enum枚举

    在Java编程语言中,`Enum`(枚举)是一种特殊的类类型,用于定义固定的、预定义的常量集合。它们在程序设计中扮演着重要的角色,特别是在需要表示一组固定值时,如状态、颜色、星期等。本资源包提供了一些关于`Enum`...

    Java中的枚举类型Enum示例源代码

    Java中的枚举类型`Enum`是面向对象编程中一种强大的工具,它允许程序员定义自己的常量集合。在Java中,枚举类型不是简单的常量数组,而是一种完整的类,具有类的所有特性,如方法、构造函数和继承。下面将详细探讨`...

    java枚举类型enum的使用

    ### Java 枚举类型 enum 的使用详解 #### 一、枚举类型概述 在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来...

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-master"显然是一个用于演示如何通过反射来操作枚举类的示例。 首先,让我们理解枚举类的基本概念。枚举类在Java中用于定义...

    简单总结java枚举类型

    Java枚举类型是Java语言中一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的方式来表示一组有限的值。枚举在Java中被引入为一个完整的类型,不同于C++中的枚举,这使得Java枚举更加强大且易于使用...

    深入理解 Java 枚举(枚举的方法+枚举的特性+枚举可以实现接口+组织枚举+策略枚举+枚举工具类等)

    Java 枚举是 Java 语言中的一种特殊类型,自 JDK 5 开始引入,使用 enum 关键字修饰。在 Java 中,枚举是一种受限制的类,具有自己的方法。枚举的本质是 java.lang.Enum 的子类,它提供了一些基本方法,如 values()...

    Java高新技术_java5的枚举的基本应用

    Java高新技术——Java 5的枚举(Enum)基本应用 在Java编程语言中,枚举是一种特殊的类,用于定义一组预定义的常量。自从Java 5引入枚举类型以来,它已经成为处理固定集合常量的首选方式,因为它提供了比传统整数...

    article-018-magic-enum:魔术枚举的示例代码

    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枚举(enum)是Java语言中的一种特殊数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中被引入,目的是为了更好地管理和使用常量,提高代码的可读性和安全性。在本实例代码中,...

    javaenum(枚举)使用详解+总结.pdf

    Java中的枚举(enum)是自JDK 1.5版本引入的一种强大的类型,它用于定义一组相关的常量。枚举在Java中被设计为一种特殊的类,它们默认继承自`java.lang.Enum`抽象类,并且是单继承的,这意味着它们无法再继承其他类...

Global site tag (gtag.js) - Google Analytics