Разница между "get" VS "getProperty"
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 в том смысле, что он возвращает записи/атрибуты
объект? Почему он не возвращает "сталь" при использовании get?
Ответы
Ответ 1
get
наследуется от Hashtable
и объявляется как return Object
.
getProperty
вводится Properties
и объявляется как возвращаемый String
.
Обратите внимание, что getProperty
будет обращаться к свойствам по умолчанию, которые вы можете передать в конструктор для Properties
; get
не будет. В большинстве случаев они возвращают одинаковое значение. В приведенном примере вы используете свойства поддержки по умолчанию:
-
prop1
не содержит прямую запись для "material"
, поэтому почему get
возвращает значение null.
-
myProp
содержит запись для "material"
, поэтому, когда вы вызываете prop1.getProperty("material")
, он обнаружит, что он не имеет его напрямую, и вместо этого зайдите в myProp
и найдите "steel"
.
Ответ 2
Посмотрите на docs показывает, что get
наследуется и возвращает Object
, тогда как getProperty
является членом Properties
и возвращает String
.
Похоже, они должны вернуть то же самое, однако из docs:
Если ключ не найден в этом списке свойств, тогда проверяется список свойств по умолчанию и его рекурсивные значения по умолчанию.
Поэтому лучше использовать getProperty
, поскольку он вернет значение по умолчанию, если оно не найдено.
Ответ 3
Второй объект Properties
(props
или prop1
?) не имеет свойств, добавленных непосредственно к нему. Он использует только myProp
как значения по умолчанию. Таким образом, эти значения никогда не добавляются в резервную копию HashMap
. Properties.getProperty()
не находит "материал" в базе данных HashMap, чтобы он мог смотреть по умолчанию. Но унаследованный HashMap.get()
выглядит только в резервной HashMap, а не в значениях по умолчанию, которые вы передали в конструктор.