Warum wird die BigDecimal-Klasse von Java nicht als final deklariert?

9

Bei der Überprüfung des Quellcodes der Java-Klasse BigDecimal Ich war überrascht, dass nicht als final class deklariert wurde:

  

Klasse BigDecimal

%Vor%      

Unveränderlich , vorzeichenbehaftete Dezimalzahlen mit beliebiger Genauigkeit.

(aus der Oracle-Dokumentation )

Gibt es einen bestimmten Grund dafür oder haben die Entwickler vergessen, dieses Keyword hinzuzufügen? Ist es eine gute Übung, unveränderliche Klassen nicht als endgültig zu deklarieren?

Dasselbe gilt für BigInteger , aber nicht für String , das als endgültig deklariert ist.

    
Frithjof 01.11.2015, 15:16
quelle

1 Antwort

12

Zitat aus Ссылка :

  

Es gibt jedoch eine mögliche Komplikation hier, da BigDecimal nicht endgültig ist und da es öffentliche Konstruktoren hat, kann es unterklassifiziert werden. (Wie in Effektivem Java, Punkt 13, Unwiderstehlichkeit verbessern, beschrieben, war dies eine Entwurfsüberprüfung, als die Klasse geschrieben wurde .)

(Hervorhebung von mir).

Da Java die Rückwärtskompatibilität immer favorisiert hat, kommt es jetzt nicht in Frage, es endgültig zu machen: es würde bestehende Unterklassen brechen.

Das heißt, genauso wie bei der Verwendung von Date, würde ich einfach annehmen, dass niemals jemand BigDecimal subclassiert, und dass BigDecimal so verwendet werden sollte, als wäre es wirklich unveränderlich.

    
JB Nizet 01.11.2015, 15:20
quelle

Tags und Links