Próbuję zrozumieć, dlaczego java.util.Properties została zaimplementowana w ten sposób. Ma dwa interfejsy: getProperty/setProperty, które akceptuje tylko łańcuchy i put/get, które akceptuje dowolny obiekt jako wartość. Te dwa interfejsy wydają się nakładać, więc ciąg dodany za pomocą funkcji put() może zostać pobrany za pomocą metody getProperty().Umieszczanie obiektów w java.util.Properties
Wygląda na to, że z tym dziwnym interfejsem hybrydowym występują pewne problemy. Umieszczenie obiektu, który przesłania właściwość ciągu, powoduje efekt uboczny usuwania wartości ciągu, tworząc wartość null jako wynik getProperty. Dodanie liczby całkowitej lub innej wartości, która ma proste tłumaczenie ciągu znaków, może być źle rozumiane jako wartość nieruchomości (ale jako właściwość zawsze ma wartość NULL).
Moje pytanie brzmi: czy istnieje prawdziwy, praktyczny powód tego? A może jest to na wpół wypalona implementacja, jak podejrzewam?
Nie mogę tego zrobić, ale podejrzewam, że problem jest zgodny wstecz. 'Właściwości' rozszerza' HashTable', która jest starą klasą przed wcześniejszymi rodzajami; oznacza to, że gdybyś miał "Właściwości", mógłbyś wywołać w nim 'properties.put (cokolwiek, niezależnieElse). Gdy pojawiły się generyczne, członkowie Java chcieli zachować kompatybilność wsteczną kodu, co oznaczało rozszerzenie "Hashtable
'Właściwości' jest podklasą' HashTable', bez nadpisywania 'get' /' put', stąd zachowanie. 'getProperty' /' setProperty' to typowane wersje 'get' /' put'. To kwestia historii i nie chowania się. –