Java SE 6 の Properies クラスにはsetProperty(String key, String value)
、 を返す というメソッドがありますObject
。さらに、Object
このキーに対して以前に保存されたもの、またはNULL
存在しない場合。setProperty(String key, String value)
値としてのみを取ることができるのでString
、なぜそのメソッドは を返さないのString
ですか?
質問する
5082 次
2 に答える
15
残念ながら、クラスjava.util.Properties
はジェネリックより何年も前に Java 1.0 に導入されました。あらゆるタイプのデータを格納できるProperties
extends 。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 に答える