Warum implementiert die Klasse Java Number byteValue () und shortValue ()? [Duplikat]

8

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.

    
Scooter 07.07.2015, 02:27
quelle

3 Antworten

7

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.

    
paulsm4 07.07.2015, 03:09
quelle
6

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%     
Makoto 07.07.2015 02:50
quelle
3

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.

    
pvg 07.07.2015 02:53
quelle

Tags und Links