11

Java SE 6 の Properies クラスにはsetProperty(String key, String value)、 を返す というメソッドがありますObject。さらに、Objectこのキーに対して以前に保存されたもの、またはNULL存在しない場合。setProperty(String key, String value)値としてのみを取ることができるのでString、なぜそのメソッドは を返さないのStringですか?

4

2 に答える 2

15

残念ながら、クラスjava.util.Propertiesはジェネリックより何年も前に Java 1.0 に導入されました。あらゆるタイプのデータを格納できるPropertiesextends 。Hashtableしたがって、次のことができます。

Properties props = new Properties();
props.put("key", new Object());  // use Hashtable's put method
props.setProperty("key", "value"); // use Proerties' setProperty method

この例setPropertyでは、このエントリに保存されている以前の値、つまり を返す必要がありObjectます。しかし、そうではありませんString!JDKの作成者は、を返すメソッドとしてClassCastException定義する必要がありました。setProperty()Object

ところで、今でも下位互換性Map<Object, Object>のためではなく、クラス Properties が実装されています。Map<String, String>

于 2012-05-20T17:26:14.243 に答える
13

何でも格納できる Hashtable を拡張することで、Properties が最初から誤解されていたためです。このように、設計は Liskov 置換の原則を尊重しませんでした。つまり、基本クラスで実行できることはすべて、サブクラスで実行できる必要があります。

Properties は Hashtable を拡張するため、実際にはあらゆる種類のオブジェクトを格納できます。

于 2012-05-20T17:21:24.117 に答える