Typen einer Variable herausfinden

  • 14 Antworten
  • Neuester Beitrag
Diskutiere Typen einer Variable herausfinden im Android App Entwicklung im Bereich Betriebssysteme & Apps.
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.
 
M

Madlip

Gast
wo kommt value her?

besteht die Möglichkeit value nicht schon vorher auf Integer zu ändern?
 
O

orium

Ambitioniertes Mitglied
Nutze doch einfach die Wrapper Klasse anstatt den primitiven Datentyp?
-> Integer anstatt int
 
K

Kollen

Gast
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.
 
StefMa

StefMa

Experte
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ß
 
K

Kollen

Gast
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.



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)?
 
S

swordi

Lexikon
nimm halt Object als Typ
 
K

Kollen

Gast
Hi,

@swordi Wie meinst du das?
 
S

swordi

Lexikon
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();
}
....
}
 
K

Kollen

Gast
Hi,

dann muss ich sagen dass mein Vorhaben garnicht funktioniert. Ich muss dann Wohl oder Übel die alternative wählen und die Methoden Überladen.
 
DieGoldeneMitte

DieGoldeneMitte

Experte
Als Typparameter sind primitive Typen wie "int" nicht zugelassen. Du kannst bestenfalls Integer bekommen.
 
M

meganeura

App-Anbieter (gewerbl.)
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.
 
M

Madlip

Gast
Was wenn du Methoden verallgemeinerst?!

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


Sent from my iPhone using Tapatalk
 
M

meganeura

App-Anbieter (gewerbl.)
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.
 
M

Madlip

Gast
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^^