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.
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.
Tags und Links java immutability final