【问题标题】:What is wrong with this switch statement? [closed]这个 switch 语句有什么问题? [关闭]
【发布时间】:2013-07-07 22:02:30
【问题描述】:

以下代码返回错误,但我不知道为什么。需要更改哪些内容才能进行编译?

switch (DAO.class) {
    case BookDAO.class: 
        return bookDAO;
}

【问题讨论】:

  • 它给出了什么错误?

标签: java switch-statement


【解决方案1】:

switchbyteshortcharint 原始数据类型一起使用。它也适用于枚举类型(以及从 Java 7 开始的 String)。不是Class 类型。

DAO.class返回DAO的Class对象

请参考what .class means

【讨论】:

  • @RiaD:我认为链接将涵盖剩余的内容。
  • 所以我必须使用 ifs ..great
【解决方案2】:

来自 Java 文档

开关适用于 byte、short、char 和 int 原始数据 类型。它也适用于枚举类型(在枚举类型中讨论), String 类,以及一些包装某些特定类的特殊类 原始类型:Character、Byte、Short 和 Integer

More On this

【讨论】:

    【解决方案3】:

    如果您使用的是 Java 7 - 您可以使用带有字符串的 switch 语句。 然后你可以这样做:

    switch (DAO.class.getName()){
        case BookDAO.class.getName() : return bookDAO;
    }
    

    getName():

    以字符串形式返回此 Class 对象表示的实体(类、接口、数组类、原始类型或 void)的名称。

    【讨论】:

      【解决方案4】:

      下面是switch语句的定义:

      与 if-then 和 if-then-else 语句不同,switch 语句可以有许多可能的执行路径。 开关适用于 byte、short、char 和 int 原始数据类型。它还适用于枚举类型(在枚举类型中讨论)、String 类一些包装某些原始类型的特殊类:Character、Byte、Short , 和整数(在数字和字符串中讨论)。


      所以在switch语句中不允许Class类型(Class classOfA = A.class;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-08
        • 1970-01-01
        • 2023-03-25
        • 2011-06-01
        相关资源
        最近更新 更多