# Gibt es eine Funktion die den Datentyp einer Variablen ermittelt?



## benedikt97 (3. Mai 2017)

Ich denke die Überschrift ist schon selbsterklärend. 
Kurze Info was ich damit anstellen möchte: Ich möchte eine Methode schreiben, welche den Datentyp mit Wert ausgibt z.B. int: 5, string: Haus, char: a


----------



## Kababär (3. Mai 2017)

Sei a die Variable, dann so 

```
a.getClass ().getName ()
```

oder mit vielen if-else Anweisung a la 

```
if (a instanceof String){...}
```


----------



## benedikt97 (3. Mai 2017)

public static void printDatentyp (final int value) {
        String typ = value.getClass ().getName();
Leider erhalte ich hier folgenden Fehler: Cannot invoke getClass() on the primitive type int

Auch bei 
public static void printDatentyp (final int value) {
        if (value instanceof int){

        }
erhalte ich folgenden Fehler: Syntax error, insert "Dimensions" to complete ArrayType


----------



## mrBrown (3. Mai 2017)

Primitive Datentypen sind keine Objekte, deshalb kannst du keine Methode drauf aufrufen oder instanceof benutzen.

Warum willst du das denn? Der Typ ist doch durch die Methodendeklaration klar...


----------



## stg (3. Mai 2017)

Was soll `value` in deinem Fall denn anderes sein als ein `int`?

Du kannst deine Methode allgemein for `Object` schreiben. Dann kannst du aber bspw nicht mehr zwischen `int` und `Integer` unterscheiden.

Für die primitiven Datentypen (byte, char, ....) kannst du überladen.


----------



## benedikt97 (3. Mai 2017)

Es geht um eine Aufgabe die ich bearbeiten muss, bei der ich ausgeben muss welchen Typ die Variable hat + den Wert. Hab jetzt das Problem gefunden man sollte das mit überladenen Methoden lösen.


----------



## Viktim (3. Mai 2017)

Also mit int char byte long double.... ist das nicht möglich, aber mit Integer, Long Double etc. schon, das liegt, wie @stg und @mrBrown  schon gesagt haben daran, das du keine Methoden auf die primitiven Datentypen aufrufen kannst.

Objekte wie z.B. Integer haben Methoden anhand derer du bestimmen kannst um was es sich handelt. 
Und für Objekte Funktioniert der Code von @Kababär .


----------



## stg (3. Mai 2017)

Viktim hat gesagt.:


> das (ist) nicht möglich (...) wie @stg schon gesagt (hat)



Hab ich das? Ich sagte doch explizit, dass man das für primitives mit overloading machen kann.


----------



## Viktim (3. Mai 2017)

stg hat gesagt.:


> Hab ich das? Ich sagte doch explizit, dass man das für primitives mit overloading machen kann.


Ohh


----------

