# Datentyp von einer Variablen ermitteln.



## Chuqa (4. Mrz 2009)

Hallo allerseits, 
gibt es in Java ein Möglichkeit den Datentyp einer Variablen zu ermitteln?
Folgendes Problem dazu. Ich beschäftige mich gerade mit Generics. Angenommen ich habe ein Funktion wie folgt:

```
public static <T> T myFunction(T myVal){
   return myVal;
}
```
Kann ich den Datentyp des Rückgabewerts ermitteln?


----------



## tfa (4. Mrz 2009)

Grundsätzlich geht das mit variable.getClass().

EDIT: Für Type-Erasures geht das natürlich nicht (siehe Ebenius).


----------



## Ebenius (4. Mrz 2009)

Chuqa hat gesagt.:


> Kann ich den Datentyp des Rückgabewerts ermitteln?


Nein. Die Parameter der generischen Klasse / Methode sind zur Laufzeit gelöscht (Type Erasure). Siehe: Sun Java Tutorial » Generics » Type Erasure

Ebenius


----------



## thE_29 (4. Mrz 2009)

Er macht dir zwar aus allem ein Object, aber wenn ich Variable.getClass sage, dann kriege ich aber so und so den Typen raus oder?!


----------



## Ebenius (4. Mrz 2009)

thE_29 hat gesagt.:


> Er macht dir zwar aus allem ein Object, aber wenn ich Variable.getClass sage, dann kriege ich aber so und so den Typen raus oder?!


Kannst Du den Satz mal übersetzen? Bis jetzt ist das tschechisch, oder? 

Ebenius


----------



## Chuqa (4. Mrz 2009)

thE_29 hat gesagt.:


> Er macht dir zwar aus allem ein Object, aber wenn ich Variable.getClass sage, dann kriege ich aber so und so den Typen raus oder?!



Ja denke ich auch, weil:

```
System.out.println(myFunction("bla").getClass());
```
 liefert mir dann class java.lang.String


----------



## thE_29 (4. Mrz 2009)

Was verstehst du da nicht?

Er = Compiler macht dir aus Generic ein Object!
Aber wenn ich Variable.getClass sage, dann kriege ich den Typen raus!

Ha, einer hat mich verstanden


----------



## Ebenius (4. Mrz 2009)

Ahh... verstanden was Du meinst. Hab in die falsche Richtung gedacht. 

Danke,
Ebenius


----------



## 0x7F800000 (4. Mrz 2009)

was heißt "Typen des Rückgabewertes ermitteln"?
Das was du übergibst, das kommt auch wieder raus.


----------



## Ebenius (4. Mrz 2009)

Der Eingangseröffner möchte den Variablen-Typ von myVal innerhalb der Methode abfragen. Also zum Beispiel sowas (kompiliert natürlich zu Recht nicht): [HIGHLIGHT="Java"]public static <T> T myFunction(T myVal){
   System.out.println("Return type is: " + T); // <== kompiliert natürlich nicht
   return myVal;
}[/HIGHLIGHT]

Ebenius


----------



## 0x7F800000 (4. Mrz 2009)

-------------------------


----------



## 0x7F800000 (4. Mrz 2009)

@Ebenius: Ja, das geht, aber da kommt es drauf an, was er damit anstellen will...
@OP: Poste mal mehr code, oder erkläre genauer, was du machen willst.


----------



## Chuqa (6. Mrz 2009)

Es ging eigentlich nur ursprünglich darum, wie ich den Datentyp ermitteln kann. Die Antwort mittels .getClass() war da absolut ausreichend. Da ich mich mit Generics beschäftigt habe, hatte mich das in dem Zusammenhang interessiert, ob ich rauskriege was ich übergeben habe (hatte das irgendwie vergessen ). Ich kann auch innerhalb der Generic-Function auf einen bestimmten Datentyp testen (z.B. mittels instanceof), natürlich nicht auf den generischen Typen, wie ja bereits Ebenius erläuterte


----------

