2012-06-19 12 views
15
Properties myProp = new Properties(); 
myProp.put("material", "steel"); 

Properties prop1 = new Properties(myProp); 

System.out.println(prop1.get("material") + ", " + prop1.getProperty("material")); 
// outputs "null, steel" 

Non è simile a ottenere getProperty, nel senso che restituisce le voci/attributi di un oggetto ? Perché è non tornare 'acciaio' quando si utilizza ottenere?Differenza tra "get' VS 'getProperty'

+0

C'è un errore di sintassi, potresti voler cambiare 'props' con' prop1' – SomeKittens

risposta

21

get è ereditato da Hashtable, e viene dichiarato di tornare Object.

getProperty è introdotta da Properties, e viene dichiarato di tornare String.

Si noti che getProperty consulta le proprietà "predefinite" che è possibile passare al costruttore per Properties; get no. Nella maggior parte dei casi, restituiranno lo stesso valore. Nell'esempio che hai dato, si sono utilizzando una proprietà backing predefinite:

  • prop1 non lo fa direttamente contiene una voce per "material", quindi, perché get sta tornando nullo.
  • myPropfa contiene una voce per "material", in modo che quando si chiama prop1.getProperty("material"), troverà che non ha direttamente, e il check-in myProp invece, e trovare "steel" lì.
+0

Non ha nulla a che fare con il tipo di ritorno. Ha solo a che fare con il fatto che * ha * aggiunto solo valori predefiniti alle seconde proprietà e nessuna proprietà di "prima classe". Quindi HashMap.get() non troverà mai nulla nella sua seconda proprietà. –

+0

@KevinWelker: stai negando che il tipo di ritorno * sia una differenza * tra i due metodi? Questo è tutto ciò che stavo cercando di dire nei primi due bit. –

+0

No, semplicemente non risponde alla sua domanda sul motivo per cui ottenere restituisce null. –

3

Uno sguardo alla docs mostra che get è ereditata, e restituisce Object mentre getProperty è un membro della Properties e restituisce il String.

Apparentemente essi dovrebbero restituire lo stesso, ma da ancora la docs:

Se la chiave non si trova in questo elenco di proprietà, l'elenco delle proprietà di default, e le sue impostazioni predefinite, in modo ricorsivo, vengono poi controllati.

Quindi è preferibile utilizzare getProperty poiché restituirà il valore predefinito se non viene trovato.

0

Il tuo secondo oggetto Properties (props o prop1?), Non ha aggiunto proprietà ad esso direttamente. Utilizza solo myProp come valori predefiniti. Quindi tali valori non vengono mai aggiunti al supporto HashMap. Properties.getProperty() non trova "materiale" nel supporto HashMap in modo che possa guardare nelle impostazioni predefinite. Ma l'ereditato HashMap.get()solo cerca nel supporto HashMap e non nei valori predefiniti passati al costruttore.

Problemi correlati