Warum verfügt die BigInteger-Klasse von Java nicht über einen Konstruktor, der ein numerisches Literal verwenden kann? [geschlossen]

8

Warum verfügt die BigInteger-Klasse von Java nicht über einen Konstruktor, der ein numerisches Literal verwenden kann? Jedes Mal, wenn ich BigInteger benutze und oft nur an sie denke, frage ich mich das.

Welchen Grund hätten die Designer von Java haben können, einen auszuschließen, trotz der überwältigenden Bequemlichkeit von einem, sollte es existieren?

Wug
quelle
Weil Sie leicht toStringeinen ganzzahligen Typ aufrufen können ? Dies würde mehrere Überlastungen erfordern - eine pro integralen Typ.
Oded
1
Ich denke, ein Konstruktor, der eine lange dauert, würde ausreichen, da ein numerisches Literal automatisch in eine lange umgewandelt werden kann. Mit Java können Sie einen Typ implizit in einen genaueren (nicht effizienten, derp) Typ umwandeln. Es ist irgendwie sinnvoll, wenn Leute, die einen aus einem Gleitkommatyp erstellen wollen, ihn zumindest umsetzen müssen, aber ich verstehe nicht, warum wir Leute zwingen, die eine große Ganzzahl mit einem Wert von 3Leiden machen wollen.
Wug
@kevincline: Ich sage nicht, entfernen Sie den String-Konstruktor, ich frage, warum es keinen langen gibt.
Wug

Antworten:

19

Die Antwort liegt im JavaDoc vonBigInteger.valueOf(long) :

Diese "statische Factory-Methode" wird einem ( long) -Konstruktor vorgezogen, da sie die Wiederverwendung häufig verwendeter BigInteger ermöglicht.

Mit anderen Worten: BigInteger.valueOf(long)Tut genau das, was Sie vom hypothetischen BigInteger(long)Konstruktor verlangen , außer dass es etwas effizienter ist (oder zumindest sein kann).

Joachim Sauer
quelle
3
Ausgezeichnet. Haben Sie einige wertvolle Internet-Mitarbeiter. +1
Robert Harvey