Klasa java.util.Properties
ma reprezentować mapę, na której klucze i wartości są obydwoma łańcuchami. Dzieje się tak, ponieważ obiekty Properties
są używane do odczytu plików .properties
, które są plikami tekstowymi.Dlaczego java.util.Properties implementuje Mapę <Obiekt, Obiekt>, a nie Mapę <Ciąg, Ciąg>
Dlaczego w Javie 5 dokonali modernizacji tej klasy, aby wdrożyć Map<Object,Object>
, a nie Map<String,String>
?
W javadoc stany:
Ponieważ właściwości dziedziczy z Hashtable, nakładane i metody putAll można zastosować do obiektu Właściwości. Ich użycie jest zdecydowanie odradzane, ponieważ pozwalają wywołującym wstawiać wpisy, których kluczami lub wartościami nie są łańcuchy. Zamiast tego należy użyć metody setProperty. Jeśli metoda przechowywania lub składowania jest wywoływana w obiekcie "zagrożonym" właściwości, który zawiera klucz lub wartość inną niż String, wywołanie zakończy się niepowodzeniem.
Ponieważ klucze i wartości mają być zarówno ciągi, to dlaczego nie wymusić tego statycznie przy użyciu odpowiedniego rodzaju rodzajowego?
Chyba dokonywania Properties
wdrożyć Map<String,String>
nie byłby w pełni wstecznie kompatybilne z kodu napisanego dla pre-Java 5. Jeśli masz starszą kod, który przykleja niebędące struny do właściwości obiektu, a następnie, że kod nie będzie już skompilować z Java 5. Ale ... czy to nie jest dobre? Czy cały czas generics nie jest w stanie wychwycić takich błędów typu podczas kompilacji?
Właściwie Map x = new Properties() działa w dowolny sposób. Jego ludzie wkładają rzeczy takie jak properties.put ("flaga", Boolean.TRUE); Widziałem, jak ludzie umieszczają wszystkie rodzaje danych w obiekcie Properties, ale nigdy nie są kluczem innym niż String. ;) –
Uaktualniłem moją odpowiedź, aby było jaśniejsze, dzięki. –
Zaczekaj chwilę! Mapa x = nowe Właściwości() nie jest legalna przed wersją Java 5, składnia została wprowadzona w języku Java 5. Tak więc instrukcja "poprzednio prawidłowy kod" jest niepoprawna. –