Sto cercando di capire perché java.util.Properties è stato implementato in questo modo. Ha due interfacce: getProperty/setProperty che accetta solo stringhe e put/get che accetta qualsiasi oggetto come valore. Queste due interfacce sembrano essere sovrapposte, quindi una stringa aggiunta con put() può essere recuperata usando getProperty().Inserimento di oggetti in java.util.Properties
Sembra che ci siano alcuni problemi con questa strana interfaccia ibrida. L'inserimento di un oggetto che sovrascrive una proprietà stringa ha l'effetto collaterale di cancellare il valore stringa, producendo null come risultato getProperty. Aggiungere un intero o qualche altro valore con una semplice traduzione di stringhe potrebbe essere frainteso come valore di una proprietà reale (ma come proprietà è sempre nullo).
La mia domanda è: c'è una vera ragione pratica per questo? O è un'implementazione semicotta come sospetto?
Impossibile eseguire il backup, ma sospetto fortemente che il problema sia la compatibilità con le versioni precedenti. 'Proprietà' estende' Hashtable', che è una vecchia classe di prima dei generici; questo significa che se tu avessi un 'Proprietà', avresti potuto chiamare' properties.put (qualunque cosa, qualunque cosa) '. Quando arrivarono i generici, i Java volevano mantenere il codice compatibile all'indietro, il che significava aver esteso "Hashtable
'Properties' è una sottoclasse di' Hashtable', senza override di 'get' /' put', quindi il comportamento. 'getProperty' /' setProperty' sono versioni digitate di 'get' /' put'. È una questione di storia e non di nascondersi. –