1

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

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

4 回答 4

16

开关适用于、 、 和原始byte数据short类型。它也适用于枚举类型(从 Java 7 开始)。不是类型。charintStringClass

DAO.class返回的类对象DAO

请参阅此以了解 .class 的含义

于 2013-07-10T05:06:29.970 回答
4

来自 Java 文档

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

更多关于这个

于 2013-07-10T05:09:04.090 回答
3

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

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

获取名称():

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

于 2013-07-10T05:16:50.157 回答
2

下面是switch语句的定义:

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


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

于 2013-07-10T05:09:54.657 回答