Kann der Typ eines Objekts ausgegeben werden?

JavaAnfänger72

Aktives Mitglied
Ich würde gerne irgendwie den Typen eines Objekts ausgeben, geht so was?
Natürlich kann ich mit instanceof prüfen, ob ein Objekt eine Instanz einer bestimmten Klasse ist,
jedoch wird mir der folgende Code nur true oder fals liefern nicht aber den Typ des Objekts.
Vielen dank für jede Antwort !!!

Code:
import java.util.Scanner;

public class test {
   
    public static void main(String[] args) {
       
        Scanner eingabe = new Scanner(System .in);
        int x = eingabe.nextInt();
       
        Integer x1 = new Integer(x);
        System.out.println(x1 instanceof Integer);  // liefert true     
         
    }   
}
 
Thallius, warum das?
Es gibt bestimmt sinnvolle Anwendungen dafür, andernfalls könnten sie es ja auch komplett aus java entfernen oder es als deprecated deklarieren. Mich hat's einfach nur mal interessiert.
 
Thallius hat recht: Code sollte niemals eine Entscheidung aufgrund des Typs eines Objekts treffen. Das führt in den allermeisten Fällen zu schrecklichem Code dessen Funktionsweise nurnoch sehr schwer nachvollzogen werden kann. Mit einer guten Klassenhierarchie kann man instanceof und Ifs mit getClass() fast immer vermeiden.

Weitere Literatur dazu:
http://www.javapractices.com/topic/TopicAction.do?Id=31
http://www.artima.com/interfacedesign/PreferPoly.html
http://stackoverflow.com/questions/20589590/why-not-use-instanceof-operator-in-oop-design
 
Thallius, warum das?
Es gibt bestimmt sinnvolle Anwendungen dafür, andernfalls könnten sie es ja auch komplett aus java entfernen oder es als deprecated deklarieren. Mich hat's einfach nur mal interessiert.
Es gibt ja auch Anwendungen dafür, aber die machen wie gesagt eben nur 1% aus. Wenn man beispielsweise eine universelle Serialisierungs lib schreiben möchte, dann kommt man da nicht drum herum. Aber in den meisten Fällen kommt man eben ohne aus
 
Eine Entscheidung aufgrund des Typs zu treffen ist aber schon etwas anderes, als den Typen auszugeben.
In deinem Code stand ein instanceof, deshalb ging ich davon aus, dass du das im Zusammenhang verwenden willst. Es geht hier ja auch nicht drum, jemanden schlecht zu machen sondern darum, vor den Gefahren zu warnen.

getClass().getName() beim Logging
Hier wird ja keine Entscheidung auf der Basis getroffen - ist daher IMHO völlig in Ordnung.a

----

instanceof bei der Implementierung von equals()
Richtig, das ist teil des einen Prozent

----

Es gibt vermutlich für so ziemlich jedes Ausdrucksmittel einer Programmiersprache genug Möglichkeiten, es fehlerhaft einzusetzen.😉
Da gebe ich dir absolut recht. instanceof ist halt für Anfänger besonders verlockend
 
Ich dank Euch allen für die anregende Diskussion, hier kann ich anscheinend viel von Euch lernen. Nun weiß ich auch, was ich mit instanceof und getClass() falsch machen könnte. Mir ging es jedoch zu keinem Zeitpunkt darum irgendwas aufgrund des Objektypens zu entscheiden, ich habe ja oben nur nach der Ausgabe des Objekttypens gefragt.
C:\Users\T510a\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif
😉
 

Zurück
Oben