Java: разница между новыми свойствами (...) и новыми свойствами (). PutAll (...) - PullRequest
4 голосов
/ 04 марта 2012

В чем разница между

    final Properties properties = new Properties(System.getProperties());

и

    final Properties properties = new Properties();
    properties.putAll(System.getProperties());

Я видел это изменение как фиксацию в JBoss AS .

Ответы [ 3 ]

6 голосов
/ 04 марта 2012

Вот пример, который демонстрирует разницу:

import java.util.*;

public class Test {
    public static void main(String[] args) {
        Properties defaults = new Properties();
        defaults.setProperty("x", "x-default");

        Properties withDefaults = new Properties(defaults);
        withDefaults.setProperty("x", "x-new");
        withDefaults.remove("x");
        // Prints x-default
        System.out.println(withDefaults.getProperty("x"));

        Properties withCopy = new Properties();
        withCopy.putAll(defaults);
        withCopy.setProperty("x", "x-new");
        withCopy.remove("x");
        // Prints null
        System.out.println(withCopy.getProperty("x"));
    }
}

В первом случае мы добавляем новое нестандартное значение для свойства "x", а затем удаляем его; когда мы спросим «х», реализация обнаружит, что его нет, и вместо этого сверится со значениями по умолчанию.

Во втором случае мы копируем значения по умолчанию в свойство без указания, что они являются значениями по умолчанию - это просто значения для свойств. Затем мы заменяем значение на «х», затем удаляем его. Когда as запрашивает «x», реализация обнаружит, что его нет, но у него нет никаких настроек по умолчанию, поэтому возвращаемое значение равно нулю.

2 голосов
/ 04 марта 2012

Первый устанавливает данные свойства по умолчанию;вторая устанавливает их как значения не по умолчанию.

0 голосов
/ 06 июня 2018

Есть еще одна вещь: putAll() будет не скопировать значения по умолчанию.

import java.util.*;

public class Test {
  public static void main(String[] args) {
  Properties defaults = new Properties();
  defaults.setProperty("x", "x-default");

  Properties withDefaults = new Properties(defaults);
  // Prints x-default
  System.out.println(withDefaults.getProperty("x"));

  Properties withCopy = new Properties();
  withCopy.putAll(withDefaults);
  // Prints null
  System.out.println(withCopy.getProperty("x"))
}
...