次のコードはエラーを返しますが、その理由はわかりません。コンパイルできるようにするには、何を変更する必要がありますか?
switch (DAO.class) {
case BookDAO.class:
return bookDAO;
}
次のコードはエラーを返しますが、その理由はわかりません。コンパイルできるようにするには、何を変更する必要がありますか?
switch (DAO.class) {
case BookDAO.class:
return bookDAO;
}
スイッチは、、、、およびプリミティブ データ型byte
で機能short
します。また、列挙型 (およびJava 7 以降) でも機能します。タイプではありません。char
int
String
Class
DAO.class
の Class オブジェクトを返しますDAO
.class の意味については、これを参照してください
Java ドキュメントから
スイッチは、byte、short、char、および int プリミティブ データ型で機能します。また、列挙型 (列挙型で説明)、String クラス、および特定のプリミティブ型 (Character、Byte、Short、および Integer) をラップするいくつかの特別なクラスでも機能します。
Java 7 を使用している場合は、文字列で switch ステートメントを使用できます。次に、次のようなことができます。
switch (DAO.class.getName()){
case BookDAO.class.getName() : return bookDAO;
}
この Class オブジェクトによって表されるエンティティ (クラス、インターフェイス、配列クラス、プリミティブ型、または void) の名前を文字列として返します。
switch ステートメントの定義は次のとおりです。
if-then ステートメントや if-then-else ステートメントとは異なり、switch ステートメントには多数の可能な実行パスを指定できます。スイッチは、byte、short、char、および int プリミティブ データ型で機能します。また、列挙型(列挙型で説明)、String クラス、および特定のプリミティブ型をラップするいくつかの特別なクラス (Character、Byte、Short、および Integer (数値と文字列で説明)) でも機能します。
そのため、switch ステートメントでClass タイプを使用することはできません (Class classOfA = A.class;)。