Typen einer Variable herausfinden

  • 14 Antworten
  • Letztes Antwortdatum
K

Kollen

Gast
Hallo,

gibt es einen Weg wie man den Typen einer Variable während der Laufzeit herausfinden kann?
Code:
if(value instanceof int)
funktioniert nicht, denn instanceof funktioniert nur bei Klassen.
 
wo kommt value her?

besteht die Möglichkeit value nicht schon vorher auf Integer zu ändern?
 
  • Danke
Reaktionen: Kollen
Nutze doch einfach die Wrapper Klasse anstatt den primitiven Datentyp?
-> Integer anstatt int
 
  • Danke
Reaktionen: Kollen
Hi,

Madlip schrieb:
wo kommt value her?
value ist einfach eine Variable, diese kann int, float, String etc... sein

Madlip schrieb:
besteht die Möglichkeit value nicht schon vorher auf Integer zu ändern?
Die Möglichkeit besteht schon, aber immer die Werte auf Long, Float, Integer zu ändern damit ich ein int/float/String an eine Methode übergebe ist nicht so schön.


orium schrieb:
Nutze doch einfach die Wrapper Klasse anstatt den primitiven Datentyp?
-> Integer anstatt int
Hab ich versucht. Bei einer int Übergabe springt es leider nicht in die Schleife wo int behandelt wird, somit geht es leider nicht.
 
Das einzige was mir einfällt wäre ein try catch.
Ins try jeweils dein
Code:
String x = value;
ins nächste
int x = value;
ins nächste
float x = value;
usw...
Gruß
 
  • Danke
Reaktionen: Kollen
Hi,

IceClaw schrieb:
Das einzige was mir einfällt wäre ein try catch.
Ins try jeweils dein
Code:
String x = value;
ins nächste
int x = value;
ins nächste
float x = value;
usw...
Gruß

Danke schon mal alle für die Hilfe.

@IceClaw es funktioniert leider nicht da der compiler schon zur Kompilierungszeit wissen will was value für ein Datentyp ist und ggf. casten.

VtamUoK1Kl2LzXfF-Bereich.png


Damit will ich versuchen eine generische Methode zu bauen die die benötigten Datentypen unterstützt wie in C++ die templates es machen. Mache ich was falsch? Geht es auch anders?
Geht es garnicht? Muss ich es doch in überladene Methoden verteilen (hab ich schon gemacht, dachte mit generischen Methoden ist weniger Schreibarbeit)?
 
nimm halt Object als Typ
 
Hi,

@swordi Wie meinst du das?
 
das was du willst, geht in java nicht. maximal sowas in der art


void method(Object x) {
if (x instance of Integer) {
doSomethingWithInteger();
}
if (x instanceof String) {
doSomethingWithString();
}
....
}
 
  • Danke
Reaktionen: Kollen
Hi,

dann muss ich sagen dass mein Vorhaben garnicht funktioniert. Ich muss dann Wohl oder Übel die alternative wählen und die Methoden Überladen.
 
Als Typparameter sind primitive Typen wie "int" nicht zugelassen. Du kannst bestenfalls Integer bekommen.
 
Ich versuche meine Programme immer ohne manuelle Typüberprüfungen zu schreiben und das klappt in der Regel auch. Ist ein instanceof notwendig, ist das oft ein Anzeichen für einen Designfehler. Es ist besser diesen Fehler auszubessern, als mit einer Typüberprüfung daran vorbei zu programmieren.
 
Was wenn du Methoden verallgemeinerst?!

Also designfehler würd ich mal nicht sagen ....


Sent from my iPhone using Tapatalk
 
Was meinst du denn mit Methoden verallgemeinern?

Meinst du etwas wie das:
Code:
Untertyp1 t1 = new Untertyp1();
method(t1);
Untertyp2 t2 = new Untertyp2();
method(t2);

public void method(Obertyp a){
     if(a instanceof Untertyp1)
          //do something
     else if(a instanceof Untertyp2)
         //do something
}
Wenn du das meinst, dann ist das sehr wohl ein Designfehler. Eine Methode die einen Obertyp als Parameter hat soll auf diesem auch nur Dinge ausführen können die der Obertyp zur Verfügung stellt. Das Problem bei derartigen Methoden ist, dass du nie weißt was mit deinem übergebenen Objekt passiert. Wenn es je nach Typ unterschiedlich behandelt werden soll, dann kann man auch gleich für jeden eine extra Methode schreiben oder wenn das nicht geht das Visitor Pattern anwenden. Durch die Verwendung von State und Strategy Pattern lässt sich oft vermeiden, dass man überhaupt in diese Situation kommt.
 
naja wo es für mich sinn macht ist z.B. bei Android wenn ich eine Methode habe die mehrere View Objekte bekommen kann (wo ich aber gestehen muss, das ich schon vorher kontrolliere was das für View Objekte sind) und dann auf diese bestimmte Sache anwende ... dann arbeite ich mit instanceof ... also bsp:

hab 2 Spinner, 2 EditText, 2 Buttons - die pack ich mir in ein HashSet und übergebe sie die an eine Methode und in dieser frag ich dann nach was es ist und behandel diese dann dementsprechend ...

EDIT: Aber die Pattern die du da ansprichst sind auf jeden Fall interessant ... ich sollte mal das Pattern of Enterprise Buch hier auch mal lesen anstatt es verstauben zu lassen^^
 
Zurück
Oben Unten