Primitive Datentypen Wrappen und als primitiv markieren?

Status
Nicht offen für weitere Antworten.

the[V]oid

Mitglied
Hallo,

Ich arbeite derzeit mit Reflections. Wenn eine Methode als Rückgabetyp "int" gesetzt hat, bekomme ich bei einer Ausführung dieser Methode ein Integer-Objekt "I" zurück, wobei
Code:
I.getClass() == Integer.TYPE
eine wahre Aussage ist (Das Feld TYPE entspricht einer Klasse, die für primitive Datentypen verwendet wird). Nun möchste ich aber selbst ein Integer-Objekt erzeugen, bei dem die obige Bedingung ebenfalls mit "wahr" erfüllt wäre - Leider schaffe ich dies nicht :( Ich kann natürlich einen int i einfach mithilfe von "new Integer(i)" wrappen, allerdings wäre das dadurch erzeugte Integer-Objekt nicht als "primitiv" markiert und die obige Bedingung wäre nicht erfüllt. Kann mir jemand helfen?

In Hoffnung auf etwas Hilfe oder einen Ansatz...
mfg^^
 
S

SlaterB

Gast
sieht schlecht aus,
bei

Class c = Integer.TYPE;
Object o = c.newInstance();
System.out.println(o.getClass() == Integer.TYPE);

gibts eine java.lang.InstantiationException: int,
zumindest in Java 1.4, vielleicht gehts in 1.5?

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

wofür brauchst du das denn?
kannst du dir nicht eine Operation

public static int getInt() {
return 42;
}

definieren, die dann ein tolles int-Objekt liefert?
 

the[V]oid

Mitglied
Naja irgendwie muss es jawohl gehen, weil was soll man denn sonst tun, wenn ein Methodenaufruf als Parameter einen int erwartet? :wink:

SlaterB hat gesagt.:
wofür brauchst du das denn?
kannst du dir nicht eine Operation

public static int getInt() {
return 42;
}

definieren, die dann ein tolles int-Objekt liefert?

Deine Methode getInt() würde kein "tolles int-Objekt" liefern, sondern ein primitives int (java trennt ja primitive und Objekte) ;)
 
S

SlaterB

Gast
dann verstehe ich deinen Satz
> Wenn eine Methode als Rückgabetyp "int" gesetzt hat, bekomme ich bei einer Ausführung dieser Methode ein Integer-Objekt "I" zurück
nicht

wie ist denn das nun, wann bekommst du das besondere Objekt?

ich dachte wenn du getInt() aufrufst bekommst du ein solches, mit dem Inhalt 42?
wenn du ein beliebiges brauchst, dann füge einen Paramter in getInt() ein,

---------

und was geht bei der Übergabe eines normalen Integers nicht?
bei mir geht:

Code:
import java.lang.reflect.Method;

public class Test {

	public static void main(String[] args) throws Exception {
		Method m =
			Test.class.getDeclaredMethod(
				"test",	new Class[] { Integer.TYPE, Integer.class });
		Class[] c = m.getParameterTypes();
		for (int i = 0; i < c.length; i++) {
			System.out.println("Class Parameter "+i+": "+c[i].getName());
		}
		m.invoke(null, new Object[] { new Integer(3), new Integer(9)});
	}

	public static void test(int i, Integer j) {
		System.out.println("i: " + i + " j: " + j);
	}

}

->
Class Parameter 0: int
Class Parameter 1: java.lang.Integer
i: 3 j: 9
 

the[V]oid

Mitglied
Hi,

Hab nich so weit gedacht, dass ich so eine getInt-Methode auch über Reflections aufrufen könnte ... danke für die Idee ;)
Dass ich einer Methode, die einen int als Parameter erwartet, auch ein Integer-Objekt übergeben kann, dass nicht von der Klasse Integer.TYPE ist, wundert mich - muss aber auch zugeben, dies nicht versucht zu haben, da es mir als unmöglich erschien, dass sowas funktioniert :wink: Naja, vielen Dank jedenfalls, das Problem hat sich damit wohl erübrigt!! :lol:
 

Wildcard

Top Contributor
Ja, da passiert etwas Magic behind the scene. In der Reflection API musste ein bisschen getrickst werden um die Brücke zwischen primitiven Datentypen und Objekten zu schlagen.
Das Ergebnis ist nicht immer schön, aber wirklich schön sind Reflections ja nie :wink:
 

the[V]oid

Mitglied
Hm meint ihr dieses Problemchen hier ließe sich irgendwie lösen?

Code:
Method m = Boolean.class.getMethod("booleanValue", new Class[0]);
Boolean result = (Boolean) m.invoke(new Boolean(true), new Object[0]);
System.out.println(result.getClass().isPrimitive()); // gibt "false" aus
System.out.println(m.getReturnType().isPrimitive()); // gibt "true" aus

Diese Ausgaben sind ja - logisch betrachtet - widersprüchlich. Meint ihr, es lässt sich irgendwie machen, dass auch die erste Ausgabe einem "true" entspricht?
 

Wildcard

Top Contributor
Widersprüchlich ist das eigentlich nicht. Es steht ja explizit in der API das primitive Rückgabewerte gewrapped werden.
Sobald das passiert ist sind sich nicht mehr primitiv.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Primitive Datentypen - Klassenpfad auflösen? Allgemeine Java-Themen 6
C Best Practice [Arrays] Wie sinnvoll prüfen, ob Array primitive Datentypen enthält? Allgemeine Java-Themen 6
O primitive Datentypen threadsicher? Allgemeine Java-Themen 13
C Primitive Datentypen in Threads Allgemeine Java-Themen 4
D Lombock primitive Felder in RequiredArgsConstructor Allgemeine Java-Themen 2
K Arrays.asList und primitive Typen Allgemeine Java-Themen 2
A Primitive oder doch nicht? Allgemeine Java-Themen 11
the[V]oid Primitive Arrays per Reflection erzeugen? Allgemeine Java-Themen 2
F Allegemeiner Datentyp für Objekte und Primitive Variablen Allgemeine Java-Themen 6
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
B Abstrakte Datentypen synchronisieren Allgemeine Java-Themen 11
M Technische Realisierung von Atomic Datentypen Allgemeine Java-Themen 16
D JNA Speicherbelegung der Datentypen Allgemeine Java-Themen 13
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
F Datentypen Kopieren von Datentypen Allgemeine Java-Themen 10
Asphorm Datentypen Datentypen werden nicht ordnungsgemäß umgewandelt Allgemeine Java-Themen 1
J Datentypen in Java Tabelle Allgemeine Java-Themen 2
B Chat auf andere Datentypen aufteilen Allgemeine Java-Themen 2
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
H Datentypen Collection für SQL-Datentypen Allgemeine Java-Themen 2
M Java-Threads und Datentypen-Zugriffe Allgemeine Java-Themen 7
B Generische Datentypen MergeSort Allgemeine Java-Themen 5
B Sortieren mit generischen Datentypen Allgemeine Java-Themen 3
X Duplikate aus eigenen Datentypen entfernen Allgemeine Java-Themen 14
I Probleme mit Datentypen Allgemeine Java-Themen 4
D Addition generischer Datentypen Allgemeine Java-Themen 12
leifg Rechenoperationen auf generische Datentypen Allgemeine Java-Themen 10
M Generische Datentypen Allgemeine Java-Themen 14
E Quelltext nach Datentypen durchsuchen Allgemeine Java-Themen 10
B Eigene Datentypen Allgemeine Java-Themen 5
H Linksschieben << bei long-Datentypen Allgemeine Java-Themen 2
R Problem mit Datentypen Allgemeine Java-Themen 7
G Java-Programm mit Jsmooth wrappen Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben