Frage

Was ist die Begründung nicht ohne Argumente Konstrukteure in Wrapper-Klassen bereitstellt? Ich weiß, dass sie von Natur aus für die Verpackung vom Urtyp gebaut wurden, so der richtige Weg, um eine primitive Art für den Bau zur Verfügung zu stellen.

Betrachtet man jedoch primitive Typen keine argument Konstruktor haben, warum nicht sie eins haben?

Außerdem, wenn sie kein argument Konstrukteure haben, können sie als T.class.newInstance() instanziert werden. Da jedoch newInstance() kein argument Konstruktor erfordert, wird dies nicht mit Wrapper-Klassen arbeiten.

War es hilfreich?

Lösung

Wrapper-Objekte sind unveränderlich. Dies bedeutet, dass, sobald ein Wrapper-Objekt einen Wert zugewiesen hat, kann dieser Wert nicht verändert werden. Es braucht nicht viel Sinn, einen Standardwert für ein Objekt, dessen Wert zu haben, kann nicht geändert werden. Sie würden nicht wollen ein newInstance() einer Wrapper-Klasse zu bekommen, denn dann würden Sie mit dem Standardwert aufgeklebt werden.

Andere Tipps

Ich denke, es ist, weil die von diesen Klassen gewickelten Werte sein sollen letzter unveränderlich (, die war das Wort, das ich suchte, dank Bill :)). Wenn es ein Default-Konstruktor, wäre es ziemlich nutzlos sein, da Sie nicht die die primitive durch die Klasse eingewickelt ändern könnten später.

Es gibt keinen Gebrauch den Urtyp in einem Konstruktor der Bereitstellung. Die Art der Wrapper-Klasse gibt den Urtyp. Da ein instanzierte Objekt-Wrapper kann nicht (unveränderlich) ändern, gibt es nur eine Chance, einen Wert zu geben: während der Bauphase. Wenn Wrapper-Klasse Objekte nicht unveränderlich, so könnte passieren seltsame Dinge. Wenn Sie einen Standard-Wrapper-Klasse Konstruktor haben würden, was würde sein Wert?

Eine bessere Frage wäre, warum sie Konstrukteure haben überhaupt. Wir sollten nur Interesse an dem Wert sein. Die Objektidentität ist irrelevant für die Bedeutung der Arten.

Die meisten (aber nicht alle) der Reflexion verwendet sind sinnlos. Aufbau eines unveränderlichen Wert wie dies würde nur sehr wenig Wert. Class.newInstance ist besonders übel aufgrund seiner Ausnahmeverhalten. T.class wo T ein generischer Parameter ist nicht wegen Löschung kompilieren.

Nur Objekte haben Konstrukteure, Primitiven haben keine Konstruktoren, damit sie nicht über einen Standardkonstruktor verfügen. Primitives erhalten ihren Standardwert aufgrund der Anzeigen / Werte auf alle Bytes 0 initialisiert werden. (Was ist falsch in boolean, 0.0f in float, 0,0 in Doppel- und Null als Referenz)

Sie erscheint ein Objekt mit newInstance () jedoch der einzige uninitialised Wert null erstellen zu wollen.

Die meisten wahrscheinlich, weil während Primitiven haben einen Standardwert (0, 0.0f, 0.0, 0L, falsch usw.), in der Regel die Wrappers diese Standardwerte als null auszudrücken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top