2012-05-20 7 views
8

Java SE 6의 Properies 클래스에는 setProperty(String key, String value)이라는 메서드가 있으며 Object을 반환합니다. 또한이 키에 대해 이전 Object이 저장되어 있거나 없으면 NULL이 저장됩니다. setProperty(String key, String value) 이후 만이 String 값으로, 왜 그 방법은 String을 반환하지 않습니다 걸릴 수 있나요?Java에서 setProperty가 Object를 반환하는 이유는 무엇입니까?

+1

javadoc을 보면 설정 한 값만 반환된다는 것을 알 수 있습니다. –

+1

왜냐하면 심하게 위장한 HashMap 이니까요?) –

+0

steProperty이 1.2에서 약왔다 @ JuanAlbertoLópezCavallotti - My Javadoc은 * HashTable.put()의 결과를 * previous * 값으로 반환하고 그렇지 않으면 null을 반환한다고 말합니다. – Nivas

답변

14

은 불행하게도 클래스 java.util.Properties 자바 1.0, 제네릭 전에 몇 년에 도입되었다. Properties은 모든 유형의 데이터를 저장할 수있는 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이 아닙니다! ClassCastException을 피하려면 JDK 작성자가 을 반환하는 메서드로 setProperty()을 정의해야했습니다.

BTW 지금도 클래스 속성 Map<Object, Object> 대신 이전 버전과의 호환성을 위해 Map<String, String> 구현합니다.

13

는 속성 때문에 아무것도 저장할 수있는, 해시 테이블을 확장하여 처음부터 오인되었다. 따라서 디자인은 Liskov 대체 원칙을 존중하지 않았습니다. 기본 클래스가 할 수있는 모든 것, 하위 클래스가 할 수 있어야하는 것입니다. 속성은 해시 테이블을 확장하기 때문에

, 당신은 실제로 그 안에 모든 종류의 객체를 저장할 수 있습니다.

관련 문제