Mam następujący kod:
Variable var;
//var is initialized to an unknown class type, stored as a public variable named type.
//var = new Variable<Integer>(Integer.class, <some integer value>);
//var.type is equal to Integer.class
switch (var.type)
{
case Integer.class:
//do some class specific stuff
break;
case Float.class:
//do some class specific stuff
break;
etc...
}
Po wpisaniu kodu pojawia się komunikat "oczekiwano stałego wyrażenia Integer.class". Chciałbym użyć bloku przełączającego, ponieważ jest to czystsze, niż pisanie na klawiaturze:
if (var.type == Integer.class) {}
Nie mam pojęcia, dlaczego blok if skompiluje się bez błędu, podczas gdy blok przełączania nie. Nie jestem całkowicie przeciwny użyciu bloków, ale jest to bardziej kwestią mojej ciekawości w tym momencie.
Odpowiedzi:
2 dla odpowiedzi № 1The Specyfikacja języka Java stwierdza, że dla switch
sprawozdania Wyrażenie:
Typ wyrażenia musi być char, byte, short, int, Character, Byte, Występuje skrót, liczba całkowita, ciąg lub typ wyliczeniowy lub występuje błąd czasu kompilacji.
0 dla odpowiedzi nr 2
Nie możesz użyć a switch
oświadczenie o tym. Można używać tylko wartości całkowitych, łańcuchów lub wyliczeń switch
case
etykiety.
0 dla odpowiedzi № 3
Nie możesz użyć a switch
instrukcja do porównania typu klasy obiektu. Musiałbyś z tym żyć if-else
sprawozdania.