Warum gibt setProperty in Java Object zurück?

8

Die Klasse "Properies" in Java SE 6 hat eine Methode namens " setProperty(String key, String value) ", die ein Object zurückgibt. Außerdem wurde der vorherige Object für diesen Schlüssel gespeichert, oder NULL , falls keiner existiert. Da setProperty(String key, String value) nur einen String als Wert annehmen kann, gibt diese Methode nicht String ?

zurück     
David Stockinger 20.05.2012, 17:18
quelle

2 Antworten

14

Leider wurde die Klasse java.util.Properties in Java 1.0 eingeführt, viele Jahre vor Generika. Properties erweitert Hashtable , die alle Arten von Daten speichern können. So können Sie Folgendes tun:

%Vor%

In diesem Beispiel muss setProperty den vorherigen Wert zurückgeben, der in diesem Eintrag gespeichert wurde, d. h. Object . Aber es ist nicht String ! Um ClassCastException zu vermeiden, mussten die JDK-Ersteller setProperty() als Methode definieren, die Object zurückgibt.

BTW selbst jetzt Klasse Eigenschaften implementiert Map<Object, Object> anstelle von Map<String, String> für die Abwärtskompatibilität.

    
AlexR 20.05.2012, 17:26
quelle
13

Weil Eigenschaften von Anfang an falsch waren, indem Hashtable erweitert wurde, was alles speichern kann. Das Design respektierte daher nicht das Liskov-Substitutionsprinzip: Alles, was eine Basisklasse kann, muss eine Unterklasse tun können.

Da Eigenschaften die Hashtabelle erweitern, können Sie tatsächlich jede Art von Objekt darin speichern.

    
JB Nizet 20.05.2012 17:21
quelle

Tags und Links