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

Не получить похожи на GetProperty в том смысле, что она возвращает записи/атрибуты объекта? Почему он не вернувшиеся „стали“ при использовании получить?разница между «получить» VS „GetProperty“

+0

Ошибка синтаксиса, вы можете изменить 'реквизит' на' prop1' – SomeKittens

ответ

21

get унаследован от Hashtable, и объявляется вернуть Object.

getProperty вводится Properties и объявляется вернуть String.

Обратите внимание, что getProperty справится со свойствами «по умолчанию», которые вы можете передать в конструктор для Properties; get не будет. В большинстве случаев они возвращают одинаковое значение. В этом примере вы дали, вам являются с использованием свойств аккомпанемента по умолчанию:

  • prop1 не непосредственно содержит запись для "material", следовательно, почему get возвращается нуль.
  • myPropделает содержит запись для "material", поэтому, когда вы звоните prop1.getProperty("material"), он обнаружит, что он не имеет его непосредственно, и проверить в myProp вместо этого, и найти "steel" там.
+0

Это не имеет никакого отношения к типу возврата. Это связано только с тем, что у него есть * только * добавлены значения по умолчанию для вторых свойств и нет фактических свойств «первого класса». Таким образом, HashMap.get() никогда не найдет ничего в своих вторых свойствах. –

+0

@KevinWelker: Вы отрицаете, что возвращаемый тип * является разницей между двумя методами? Это все, что я пытался сказать в первых двух битах. –

+0

Нет, он просто не отвечает на вопрос о том, почему get возвращает null. –

3

Посмотрите на docs показывает, что get наследуется, и возвращает Object тогда getProperty является членом Properties и возвращает String.

Казалось бы, они должны вернуть то же самое, однако из docs снова:

Если ключ не найден в этом списке свойств, список свойство по умолчанию, и его значения по умолчанию, рекурсивно, затем проверяется.

Так что лучше всего использовать getProperty, так как он вернет значение по умолчанию, если оно не найдено.

0

Ваш второй объект Properties (props или prop1?), Не имеет свойств, добавленных непосредственно к нему. Он использует только myProp. Таким образом, эти значения никогда не добавляются к поддержке HashMap. Properties.getProperty() не находит «материал» в базе данных HashMap, чтобы он мог просматривать значения по умолчанию. Но унаследованный HashMap.get()только смотрит в поддержку HashMap, а не по умолчанию, которые вы передали в конструктор.

Смежные вопросы