Datentypen Typbestimmung unbekannter Wrapper-Klassen

  • Themenstarter Themenstarter datenklaun
  • Beginndatum Beginndatum
D

datenklaun

Gast
Hallo

Zur Zeit arbeite ich an einer Art einfachem Interpreter, und stieß dabei auf das Problem, aus primitiven Datentypen, die mithilfe der Wrapper-Klassen in „java.lang” zu Objekten umgewandelt wurden, den zugrundeliegenden prim. Typ abzuleiten. Dazu wollte ich nach folgendem Prinzip vorgehen:

Java:
Object Int = new Integer(83);
Int.getClass().TYPE;

Das führt unweigerlich zu einem Compiler-Error, den ich nicht verstehe.
Leider werden die Daten erst zur Laufzeit verpackt, was ein explizites Casten unmöglich macht.
Es freut mich sehr, wenn mir jemand einen Tip dazu geben kann, denn wahrscheinlich übersehe ich einen grundsätzlichen Fehler - bin noch rel. neu, was Java betrifft und habe noch nicht alles so ganz verstanden.

Viele Grüße, Datenklaun.
 
Die Beziehungen
Code:
int.class <-> Integer.class
kann man so ohne weiteres glaube ich nicht herleiten. Was du aber machen kannst ist dir eine Map anzulegen die diese Beziehungen abbildet.

Java:
Map<Class<?>, Class<?>> primitiveWrappers = new HashMap<Class<?>, Class<?>>();
primitiveWrappers.put(Integer.class, int.class);
// ... alle anderen Wrapper

Object intObject = new Integer(83);
Class<?> primitive = primitiveWrappers.get(intObject.getClass());
 
Hallo

Nachdem ich mich, trotz eurer guten Antworten, noch stundenlang mit dem TYPE beschäftigt habe, kam ich doch zu dem Entschluß, daß eine dieser Lösungen schneller umzusetzen ist.
Da es sich bei meinem Experiment bisher um die Basis eines Interpreters handelt, der diese Typbestimmung wahrscheinlich sehr sehr oft in Folge ausführt, führte ich für beide Möglichkeiten einen Performance-Test aus, mit dem Ergebnis, daß die Hashmap deutlich langsamer war.
Der Test mit den 8 Variablen, die jeweils 10000 mal auf ihren Typ geprüft wurden, ergab bei dem Namensvergleich ca. 123.000 ns und bei der Hashmap ca. 170.000 ns.
Danke euch beiden für die Expressantworten, die mir viel Zeit mit stumpfem, aussichtslosem Experimentieren erspart haben.

Viele Grüße,
der Datenclown.
 

Zurück
Oben