# Objecttyp abfragen...



## halskrause (1. Okt 2009)

Hi. Ich lerne seit ein paar Tagen Java. Da ich von PHP komme und an lohse Dateitypen gewohnt bin... folgende Frage:
Kann man in Java nach dem Typ fragen?


----------



## bygones (1. Okt 2009)

die frage ist eher... warum ?

getClass() liefert die jedenfalls die Klasse


----------



## ARadauer (1. Okt 2009)

oder so...


```
String str = "asdf";
      
      if(str instanceof String){
         ...
      }
```
aber generell kann man sagen wenn du als Java Anfäger von der PHP Schiene kommst und sowas machen möchtest, machst du wahrscheinlich was falsch ;-) 

Was hast du genau vor?


----------



## halskrause (1. Okt 2009)

Folgender Fall:

```
int zahl1 = 7;
int zahl2 = 2;
???   berechnung = zahl1  / zahl2 ;
```

Die Idee ist ja, dass hier der Typ (???) automatisch festgelegt werden soll.


----------



## tfa (1. Okt 2009)

Java ist statisch typisiert. Ein "var" wie in anderen Sprachen gibt es nicht. Du musst hier schon selbst int hinschreiben (oder einen anderen passenden, numerischen Typen).


----------



## ARadauer (1. Okt 2009)

eine divsion durch eine int zahl liefert automatisch eine int zah.... schlecht... du musst sie zb auf eine float casten...


```
int zahl1 = 7;
      int zahl2 = 2;
      float berechnung = zahl1  / zahl2 ; // :-(
      System.out.println(berechnung);
      berechnung = zahl1  / (float)zahl2 ; // :-)
      System.out.println(berechnung);
```


----------



## bygones (1. Okt 2009)

tfa hat gesagt.:


> Java ist statisch typisiert. Ein "var" wie in anderen Sprachen gibt es nicht. Du musst hier schon selbst int hinschreiben (oder einen anderen passenden, numerischen Typen).



und bevor landei wieder kommt.... bei einer statisch typisierte sprache heisst es aber nicht dass man es im grunde selbst hinschreiben muss... das koennte der compiler auch fuer dich tun.

bygones

wie schon gesagt, in java musst du den typ immer angeben


----------



## tfa (1. Okt 2009)

bygones hat gesagt.:


> und bevor landei wieder kommt.... bei einer statisch typisierte sprache heisst es aber nicht dass man es im grunde selbst hinschreiben muss... das koennte der compiler auch fuer dich tun.


Richtig. Deswegen schrieb ich auch, ein "var" gibt es nicht. (Ich glaube, Typinferenz war auch mal für Java 7 angedacht). 
Trotzdem ist das noch was anderes als dynamische Typisierung wie in PHP.


----------



## Landei (1. Okt 2009)

Java *hat* Typinferenz, allerdings äußerst beschränkt.


 Man kann z.B. mit statischen Methoden die angedachte <> Inferenz "simulieren":


```
package cool;
class Util {
   public static <T> ArrayList<T> ArrayList(){ return new ArrayList<T>(); }
}

//Benutzung:
import static cool.Util.*;
List<String> list = ArrayList();  //das ist tatsächlich typsicher!
```


----------



## bygones (1. Okt 2009)

Landei hat gesagt.:


> ```
> List<String, Integer> list = ArrayList();  //das ist tatsächlich typsicher!
> ```


ne list mit 2 typparameter ? was java so alles kann ;-)


----------



## tfa (1. Okt 2009)

... und wieder was völlig anderes, nämlich Generics. Diese Typen gibt es zur Laufzeit sowieso (fast) nicht mehr, im Gegensatz zu dem, was der TS gefragt hat.


----------



## Landei (1. Okt 2009)

bygones hat gesagt.:


> ne list mit 2 typparameter ? was java so alles kann ;-)



Korrigiert :-/



tfa hat gesagt.:


> ... und wieder was völlig anderes, nämlich Generics. Diese Typen gibt es zur Laufzeit sowieso (fast) nicht mehr, im Gegensatz zu dem, was der TS gefragt hat.



Deshalb sage ich ja "beschränkt". Wenn du ein nicht-generisches Beispiel sehen willst, muss man schon Monstrositäten ausbuddeln wie 
	
	
	
	





```
new Object(){ public void foo(){System.out.println("foo!");}}.foo();
```
, die beweisen, dass der Compiler durchaus _könnte_ wenn er nur wollte (denn offenbar weiß ja der Compiler hier mehr über unser Objekt als nur den Typ java.lang.Object)) ...


----------

