Mogelijk duplicaat:
Hoe bepaal je de klasse van een object (in Java)?< br>
Java bepaalt welke klasse een object is
Ik heb het volgende voorbeeld van een onvolledige methode om het objecttype van een bepaald object te vergelijken
public void test(Object value) {
if (value.getClass() == Integer) {
System.out.println("This is an Integer");
}else if(value.getClass() == String){
System.out.println("This is a String");
}else if(value.getClass() == Float){
System.out.println("This is a Float");
}
}
De methode kan worden aangeroepen als:
test("Test");
test(12);
test(10.5f);
deze methode werkt niet echt, help me alstublieft om het te laten werken
Antwoord 1, autoriteit 100%
Je bent de .class
vergeten:
if (value.getClass() == Integer.class) {
System.out.println("This is an Integer");
}
else if (value.getClass() == String.class) {
System.out.println("This is a String");
}
else if (value.getClass() == Float.class) {
System.out.println("This is a Float");
}
Merk op dat dit soort code meestal het teken is van een slecht OO-ontwerp.
Houd er ook rekening mee dat het vergelijken van de klasse van een object met een klasse en het gebruik van instanceof niet hetzelfde is. Bijvoorbeeld:
"foo".getClass() == Object.class
is onwaar, terwijl
"foo" instanceof Object
is waar.
Of de ene of de andere moet worden gebruikt, hangt af van uw vereisten.
Antwoord 2, autoriteit 34%
Je kunt klassetokens met elkaar vergelijken, dus je zou value.getClass() == Integer.class
kunnen gebruiken. De eenvoudigere en meer canonieke manier is echter om instanceof
:
te gebruiken
if (value instanceof Integer) {
System.out.println("This is an Integer");
} else if(value instanceof String) {
System.out.println("This is a String");
} else if(value instanceof Float) {
System.out.println("This is a Float");
}
Opmerkingen:
- het enige verschil tussen de twee is dat het vergelijken van klassetokens alleen exacte overeenkomsten detecteert, terwijl
instanceof C
ook overeenkomt met subklassen vanC
. In dit geval zijn alle vermelde klassen echterfinal
, dus ze hebben geen subklassen. Dusinstanceof
is hier waarschijnlijk goed. -
zoals JB Nizet zei, dergelijke cheques zijn geen OO-ontwerp. U kunt dit probleem wellicht op een meer OO-manier oplossen, bijv.
System.out.println("This is a(n) " + value.getClass().getSimpleName());
Antwoord 3, autoriteit 9%
U wilt instanceof
:
if (value instanceof Integer)
Dit geldt zelfs voor subklassen, wat meestal is wat je wilt, en het is ook null-safe. Als je echt exact dezelfde les nodig hebt, zou je dat kunnen doen
if (value.getClass() == Integer.class)
of
if (Integer.class.equals(value.getClass())
Antwoord 4, autoriteit 6%
Gebruik value instanceof YourClass