Die Java Number-Klasse ist die Basisklasse für die Klassen das Wrapping primitiver Typen (Byte, Short, Integer, Long, Float, Double) und auch anderer Klassen wie BigInteger und BigDecimal und hat 6 Accessor (aka Getter) Methoden:
%Vor%Ich verstehe nicht, warum sie byteValue () und shortValue () nicht auch abstrahieren.
Eine andere Theorie:
Warum shortValue ( ) Methode sind konkret, aber intValue () ist abstrakt in java.lang.Number?
Gemäß der Dokumentation der Klasse Number die Methoden ByteValue und ShortValue wurden zuerst in JDK1.1 hinzugefügt. Das ist anders die anderen "Value" -Methoden, die bereits im sehr erste JDK-Version. Meine Annahme ist, dass diese beiden Methoden gemacht wurden Beton, um die Kompatibilität mit bestehenden (auch Nicht-Standard) Unterklassen von Number, die andernfalls gewesen wären gebrochen durch das Hinzufügen neuer abstrakter Methoden in der Oberklasse.
Oder:
Abstrakte Methoden in der Zahlenklasse
Ein Blick auf die Quelle für sie sagt warum:
%Vor%Sie verlassen sich beide auf die Tatsache, dass intValue () definiert wird, und nur benutze alles, was sie dafür bereitstellen. Die Number-Klasse stammt aus Java 1.1 ... Denken Sie daran, dass sich Longs und Ints in Java unterschiedlich verhalten, während Bytes, Kurzschlüsse werden immer noch in 32-Bit-Raum verarbeitet. Lange - 64 Bit - zusätzliche Kosten verursachen. Also ich vermute, dass die Grund dafür gibt es keinen Standard für intValue () ist, weil sie wollten vermeiden Sie den möglicherweise unnötigen Overhead.
Sie sind nicht abstrakt, weil sie das Ergebnis von intValue()
auf ihren angegebenen Typ anwenden - sei das byte
oder short
. Aus diesem Grund sind diese Methoden bereits gut definiert; Wie die intValue
definiert ist, hängt vollständig von der Implementierung der untergeordneten Klasse Number
ab.
Die Dokumentation mindestens sagt so viel ; Hier ist die Quelle dieser beiden Funktionen, um es zu beweisen.
%Vor%Weil sie im Sinne von intValue () implementiert werden können, was abstrakt ist. Sobald Sie intValue haben, gibt es einfache konkrete und korrekte Implementierungen von Byte- und Short-Werten, die die Klasse implementiert. Eine andere Möglichkeit, dies zu betrachten, ist, dass es sich im Wesentlichen um konkrete Convenience-Methoden handelt, die in JDK 1.1 hinzugefügt wurden.
Tags und Links java