2012-06-19 23 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" 

no es GET similar a getProperty en el sentido de que devuelve las entradas/atributos de un objeto ? ¿Por qué es no regresar 'acero' cuando se utiliza conseguir?Diferencia entre "conseguir' VS 'getProperty'

+0

Hay un error de sintaxis, es posible que desee cambiar 'props' a' prop1' – SomeKittens

Respuesta

21

get se hereda de Hashtable, y se declara para volver Object.

getProperty se introduce por Properties, y se declara para volver String.

Tenga en cuenta que getProperty consultará las propiedades "predeterminadas" que puede pasar al constructor para Properties; get no lo hará. En la mayoría de los casos, devolverán el mismo valor. En el ejemplo que has dado, que son usando el inmueble de respaldo por defecto:

  • prop1 no lo hace directamente contienen una entrada para "material", de ahí get está volviendo nula.
  • myProphace contienen una entrada para "material", por lo que cuando se llama a prop1.getProperty("material"), se dará cuenta de que no tiene directamente, y el check in myProp lugar, y encontrar "steel" allí.
+0

No tiene nada que ver con el tipo de devolución. Solo tiene que ver con el hecho de que solo * ha agregado valores predeterminados a las segundas propiedades y no tiene propiedades de "primera clase". Entonces HashMap.get() nunca encontrará nada en su segunda propiedad. –

+0

@KevinWelker: ¿Está negando que el tipo de devolución * sea una diferencia * entre los dos métodos? Eso es todo lo que intentaba decir en los primeros dos bits. –

+0

No, simplemente no responde su pregunta sobre por qué get devuelve null. –

3

Un vistazo a la docs muestra que get es hereditaria, y devuelve Object mientras que getProperty es miembro de Properties y devuelve el String.

Aparentemente deben devolver el mismo, sin embargo desde el docs nuevo:

Si no se encuentra la clave en esta lista de propiedades, la lista de propiedades por defecto, y sus valores por defecto, de forma recursiva, se revisan.

Por lo tanto, es mejor utilizar getProperty, ya que si no se encuentra, devolverá el valor predeterminado.

0

Su segundo objeto Properties (props o ?), No tiene propiedades añadidas directamente. Solo usa myProp como valores predeterminados. Entonces esos valores nunca se agregan al respaldo HashMap. Properties.getProperty() no encuentra "material" en el HashMap de respaldo por lo que se puede ver en los valores predeterminados. Pero el HashMap.get()HashMap.get()heredado solo busca en el HashMap de respaldo y no en los valores predeterminados que pasó al constructor.

Cuestiones relacionadas