1

次のコードはエラーを返しますが、その理由はわかりません。コンパイルできるようにするには、何を変更する必要がありますか?

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

4 に答える 4

16

スイッチは、、、、およびプリミティブ データ型byteで機能shortします。また、列挙型 (およびJava 7 以降) でも機能します。タイプではありません。charintStringClass

DAO.classの Class オブジェクトを返しますDAO

.class の意味については、これを参照してください

于 2013-07-10T05:06:29.970 に答える
4

Java ドキュメントから

スイッチは、byte、short、char、および int プリミティブ データ型で機能します。また、列挙型 (列挙型で説明)、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;
}

getName():

この Class オブジェクトによって表されるエンティティ (クラス、インターフェイス、配列クラス、プリミティブ型、または void) の名前を文字列として返します。

于 2013-07-10T05:16:50.157 に答える
2

switch ステートメントの定義は次のとおりです。

if-then ステートメントや if-then-else ステートメントとは異なり、switch ステートメントには多数の可能な実行パスを指定できます。スイッチは、byte、short、char、および int プリミティブ データ型で機能します。また、列挙型(列挙型で説明)、String クラス、および特定のプリミティブ型をラップするいくつかの特別なクラス (Character、Byte、Short、および Integer (数値と文字列で説明)) でも機能します。


そのため、switch ステートメントでClass タイプを使用することはできません (Class classOfA = A.class;)。

于 2013-07-10T05:09:54.657 に答える