Класс AbstractPreferences

public abstract class AbstractPreferences
extends Preferences

Этот класс предоставляет скелетную реализацию класса Preferences, значительно облегчая задачу его реализации.

Этот класс предназначен только для Preferences. Обычным пользователям Preferences средства не нужно изучать эту документацию. Достаточно документации Preferences.

Реализаторы должны переопределить девять абстрактных методов интерфейса поставщика услуг (SPI): getSpi(String), putSpi(String,String), removeSpi(String), childSpi(String), removeNodeSpi(), keysSpi(), childrenNamesSpi(), syncSpi() и flushSpi(). Все конкретные методы точно определяют, как они реализованы на основе этих методов SPI. Реализатор может по своему усмотрению переопределить один или несколько конкретных методов, если стандартная реализация не удовлетворяет по каким-либо причинам, например, по производительности.

Методы SPI делятся на три группы, касающиеся поведения исключений. Метод getSpi не должен выбрасывать исключения, но это не имеет большого значения, так как любое исключение, брошенное этим методом, будет перехвачено методом get(String,String), который вернёт указанное значение по умолчанию вызывающей стороне.

Методы removeNodeSpi, keysSpi, childrenNamesSpi, syncSpi и flushSpi предназначены для выбрасывания исключения BackingStoreException, и реализация должна бросить это проверяемое исключение, если не может выполнить операцию. Исключение распространяется наружу, вызывая сбой соответствующего метода API.

Остальные методы SPI putSpi(String,String), removeSpi(String) и childSpi(String) имеют более сложное поведение исключений. Они не предназначены для выбрасывания BackingStoreException, так как они, как правило, могут соблюдать свои контракты, даже если хранилище данных недоступно. Это верно, потому что они не возвращают никакой информации, и их эффекты не обязаны стать постоянными до последующего вызова Preferences.flush() или Preferences.sync(). Как правило, эти методы SPI не должны выбрасывать исключения. В некоторых реализациях могут быть обстоятельства, при которых эти вызовы не смогут даже поставить запрошенную операцию в очередь для обработки в будущем. Даже в этих обстоятельствах, как правило, лучше просто проигнорировать вызов и вернуть значение, а не выбрасывать исключение. Однако в этих обстоятельствах последующий вызов flush() или sync не подразумевает, что все предыдущие операции были успешно сделаны постоянными.

Существует одно обстоятельство, при котором putSpi, removeSpi and childSpi должен выбрасывать исключение: если вызывающей стороне не хватает достаточных привилегий в операционной системе для выполнения запрошенной операции. Это, например, произойдет на большинстве систем, если не обладающий привилегиями пользователь пытается изменить системные настройки. (Необходимые привилегии будут различаться в разных реализациях. В некоторых реализациях это право изменения содержимого некоторого каталога в файловой системе; в других — право изменения содержимого некоторого ключа в реестре). В любом из этих случаев было бы, как правило, нежелательно, чтобы программа продолжала выполнение, как если бы эти операции стали постоянными в более позднее время. Хотя реализации не обязаны выбрасывать исключение в этих обстоятельствах, им рекомендуется это делать. Соответствующим исключением было бы SecurityException.

Большинство методов SPI требуют, чтобы реализация читала или записывала информацию в узле настроек. Реализатор должен быть осторожен, так как другая виртуальная машина может одновременно удалить этот узел из хранилища данных. Ответственность реализации состоит в том, чтобы воссоздать узел, если он был удален.

Примечание для реализации: В стандартных реализациях Preferences от Sun идентичность пользователя наследуется от операционной системы и не меняется на протяжении всего срока службы виртуальной машины. Признается, что у Preferences реализаций на стороне сервера может меняться идентичность пользователя от запроса к запросу, неявно передаваемая методам Preferences с помощью статического экземпляра ThreadLocal. Авторы таких реализаций настоятельно рекомендуют определять пользователя в момент доступа к настройкам (например, методом get(String,String) или put(String,String)), а не постоянно связывать пользователя с каждым экземпляром Preferences. Такое поведение противоречит стандартному использованию Preferences и приведёт к значительной путанице.

С момента:
1.4
См. также:
Preferences

Поля

Модификатор и Тип Поле Описание
protected Object lock

Объект, монитор которого используется для блокировки этого узла.

protected boolean newNode

Это поле должно быть true если этот узел не существовал в хранилище данных до создания этого объекта.

Поля, объявленные в классе java.util.prefs.Preferences

MAX_KEY_LENGTH, MAX_NAME_LENGTH, MAX_VALUE_LENGTH

Краткое описание конструкторов

Модификатор Конструктор Описание
protected AbstractPreferences​(AbstractPreferences parent, String name)

Создаёт узел настроек с указанным родителем и указанным именем, относительным к родителю.

Методы

Модификатор и тип Метод Описание
String absolutePath()

Реализует метод absolutePath согласно спецификации в Preferences.absolutePath().

protected AbstractPreferences[] cachedChildren()

Возвращает все известные не удаленные дочерние узлы этого узла.

String[] childrenNames()

Реализует метод children согласно спецификации в Preferences.childrenNames().

protected abstract String[] childrenNamesSpi()

Возвращает имена дочерних узлов этого узла настроек.

protected abstract AbstractPreferences childSpi​(String name)

Возвращает дочерний узел с заданным именем, создавая его, если он еще не существует.

void clear()

Реализует метод clear согласно спецификации в Preferences.clear().

void exportNode​(OutputStream os)

Реализует метод exportNode согласно спецификации в Preferences.exportNode(OutputStream).

void exportSubtree​(OutputStream os)

Реализует метод exportSubtree согласно спецификации в Preferences.exportSubtree(OutputStream).

void flush()

Реализует метод flush согласно спецификации в Preferences.flush().

protected abstract void flushSpi()

Этот метод вызывается с заблокированным узлом.

String get​(String key, String def)

Реализует метод get согласно спецификации в Preferences.get(String,String).

boolean getBoolean​(String key, boolean def)

Реализует метод getBoolean согласно спецификации в Preferences.getBoolean(String,boolean).

byte[] getByteArray​(String key, byte[] def)

Реализует метод getByteArray согласно спецификации в Preferences.getByteArray(String,byte[]).

protected AbstractPreferences getChild​(String nodeName)

Возвращает дочерний узел с заданным именем, если он существует, или null в противном случае.

double getDouble​(String key, double def)

Реализует метод getDouble согласно спецификации в Preferences.getDouble(String,double).

float getFloat​(String key, float def)

Реализует метод getFloat согласно спецификации в Preferences.getFloat(String,float).

int getInt​(String key, int def)

Реализует метод getInt согласно спецификации в Preferences.getInt(String,int).

long getLong​(String key, long def)

Реализует метод getLong согласно спецификации в Preferences.getLong(String,long).

protected abstract String getSpi​(String key)

Возвращает значение, связанное с заданным ключом в этом узле настроек, или null если нет ассоциации для этого ключа или ассоциацию нельзя определить в данный момент.

protected boolean isRemoved()

Возвращает true если этот узел (или предковый) был удален с помощью метода removeNode().

boolean isUserNode()

Реализует метод isUserNode согласно спецификации в Preferences.isUserNode().

String[] keys()

Реализует метод keys согласно спецификации в Preferences.keys().

protected abstract String[] keysSpi()

Возвращает все ключи, имеющие связанное значение в этом узле настроек.

String name()

Реализует метод name согласно спецификации в Preferences.name().

Preferences node​(String path)

Реализует метод node согласно спецификации в Preferences.node(String).

boolean nodeExists​(String path)

Реализует метод nodeExists согласно спецификации в Preferences.nodeExists(String).

Preferences parent()

Реализует метод parent согласно спецификации в Preferences.parent().

void put​(String key, String value)

Реализует метод put согласно спецификации в Preferences.put(String,String).

void putBoolean​(String key, boolean value)

Реализует метод putBoolean согласно спецификации в Preferences.putBoolean(String,boolean).

void putByteArray​(String key, byte[] value)

Реализует метод putByteArray согласно спецификации в Preferences.putByteArray(String,byte[]).

void putDouble​(String key, double value)

Реализует метод putDouble согласно спецификации в Preferences.putDouble(String,double).

void putFloat​(String key, float value)

Реализует метод putFloat согласно спецификации в Preferences.putFloat(String,float).

void putInt​(String key, int value)

Реализует метод putInt согласно спецификации в Preferences.putInt(String,int).

void putLong​(String key, long value)

Реализует метод putLong согласно спецификации в Preferences.putLong(String,long).

protected abstract void putSpi​(String key, String value)

Добавляет заданную пару ключ-значение в этот узел настроек.

void remove​(String key)

Реализует метод remove(String) согласно спецификации в Preferences.remove(String).

void removeNode()

Реализует метод removeNode() согласно спецификации в Preferences.removeNode().

protected abstract void removeNodeSpi()

Удаляет этот узел настроек, делая его недоступным и все настройки, которые он содержит.

protected abstract void removeSpi​(String key)

Удаляет ассоциацию (если она есть) для указанного ключа в этом узле настроек.

void sync()

Реализует метод sync согласно спецификации в Preferences.sync().

protected abstract void syncSpi()

Этот метод вызывается с заблокированным узлом.

String toString()

Возвращает абсолютный путь к этому узлу настроек.

Методы, объявленные в классе java.util.prefs.Preferences

addNodeChangeListener, addPreferenceChangeListener, importPreferences, removeNodeChangeListener, removePreferenceChangeListener, systemNodeForPackage, systemRoot, userNodeForPackage, userRoot

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Поля

newNode

protected boolean newNode

Это поле должно быть true , если этот узел не существовал в базовом хранилище до создания этого объекта. Поле инициализируется значением false, но может быть установлено в true конструктором подкласса (и после этого не должно изменяться). Это поле указывает, должно ли генерироваться событие изменения узла после завершения создания.

lock

protected final Object lock

Объект, монитор которого используется для блокировки этого узла. Этот объект используется вместо самого узла, чтобы уменьшить вероятность преднамеренного или непреднамеренного отказа в обслуживании из-за заблокированного узла. Чтобы избежать тупика, узел никогда не блокируется потоком, удерживающим блокировку на потомке этого узла.

Конструкторы

AbstractPreferences

protected AbstractPreferences(AbstractPreferences parent,
                              String name)

Создаёт узел настроек со указанным родителем и указанным именем относительно родителя.

Параметры:
parent - родитель этого узла настроек, или null, если это корневой узел.
name - имя этого узла настроек, относительно родителя, или "" если это корневой узел.
Исключения:
IllegalArgumentException - если name содержит косую черту ('/'), или parent является null и имя не является "".

Методы

put

public void put(String key,
                String value)

Реализует метод put согласно спецификации в Preferences.put(String,String).

Эта реализация проверяет, являются ли ключ и значение допустимыми, получает блокировку узла предпочтений, проверяет, не был ли узел удалён, вызывает putSpi(String,String), и если существуют слушатели изменений предпочтений, добавляет уведомление в очередь для обработки в потоке диспетчеризации событий.

Определено в:
put в классе Preferences
Параметры:
key - ключ, с которым будет сопоставлено указанное значение.
value - значение, которое будет сопоставлено указанному ключу.
Исключения:
NullPointerException - если ключ или значение являются null.
IllegalArgumentException - если key.length() превышает MAX_KEY_LENGTH или если value.length превышает MAX_VALUE_LENGTH.
IllegalArgumentException - если ключ или значение содержат нулевой управляющий символ, код U+0000.
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().

get

public String get(String key,
                  String def)

Реализует метод get согласно спецификации в Preferences.get(String,String).

Эта реализация сначала проверяет, является ли key null, выбрасывая NullPointerException, если это так. Затем она получает блокировку узла предпочтений, проверяет, не был ли узел удален, вызывает getSpi(String) и возвращает результат, если вызов getSpi не возвращает null или не выбрасывает исключение, в противном случае этот вызов возвращает def.

Определено в:
get в классе Preferences
Параметры:
key - ключ, ассоциированное значение которого нужно вернуть.
def - значение, которое будет возвращено в случае, если у узла предпочтений нет значения, ассоциированного с key.
Возвращает:
значение, ассоциированное с key, или def, если значение не ассоциировано с key.
Исключения:
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
NullPointerException - если ключ является null. (По умолчанию null разрешено.)
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.

remove

public void remove(String key)

Реализует метод remove(String) согласно спецификации в Preferences.remove(String).

Эта реализация получает блокировку узла предпочтений, проверяет, не был ли узел удалён, вызывает removeSpi(String) и, если существуют слушатели изменений предпочтений, добавляет уведомление в очередь для обработки в потоке диспетчеризации событий.

Определено в:
remove в классе Preferences
Параметры:
key - ключ, отображение которого нужно удалить из узла предпочтений.
Исключения:
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
NullPointerException - если key является null.

clear

public void clear()
           throws BackingStoreException

Реализует метод clear согласно спецификации в Preferences.clear().

Эта реализация получает блокировку узла предпочтений, вызывает keys() для получения массива ключей и перебирает массив, вызывая remove(String) для каждого ключа.

Определено в:
clear в классе Preferences
Исключения:
BackingStoreException - если операцию невозможно выполнить из-за сбоя в базовом хранилище или невозможности с ним взаимодействовать.
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
См. также:
Preferences.removeNode()

putInt

public void putInt(String key,
                   int value)

Реализует метод putInt согласно спецификации в Preferences.putInt(String,int).

Эта реализация преобразует value в строку с помощью Integer.toString(int) и вызывает put(String,String) на результате.

Определено в:
putInt в классе Preferences
Параметры:
key - ключ, с которым будет связана строковая форма значения.
value - значение, строковая форма которого будет связана с ключом.
Исключения:
NullPointerException - если ключ null.
IllegalArgumentException - если key.length() превышает MAX_KEY_LENGTH.
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
См. также:
Preferences.getInt(String,int)

getInt

public int getInt(String key,
                  int def)

Реализует метод getInt согласно спецификации в Preferences.getInt(String,int).

Эта реализация вызывает get(key, null). Если возвращаемое значение не null, реализация пытается преобразовать его в целое число с помощью Integer.parseInt(String). Если попытка успешна, возвращаемое значение возвращается этим методом. В противном случае возвращается def.

Определено в:
getInt в классе Preferences
Параметры:
key - ключ, ассоциированное значение которого нужно вернуть как целое число.
def - значение, которое будет возвращено в случае, если у узла предпочтений нет значения, ассоциированного с key или ассоциированное значение нельзя интерпретировать как целое число.
Возвращает:
целое число, представленное строкой, ассоциированной с key в этом узле предпочтений, или def если ассоциированное значение не существует или не может быть интерпретировано как целое число.
Исключения:
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
NullPointerException - если key является null.
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
См. также:
Preferences.putInt(String,int), Preferences.get(String,String)

putLong

public void putLong(String key,
                    long value)

Реализует метод putLong согласно спецификации в Preferences.putLong(String,long).

Эта реализация преобразует value в строку с помощью Long.toString(long) и вызывает put(String,String) на результате.

Определено в:
putLong в классе Preferences
Параметры:
key - ключ, с которым будет связана строковая форма значения.
value - значение, строковая форма которого будет связана с ключом.
Исключения:
NullPointerException - если ключ null.
IllegalArgumentException - если key.length() превышает MAX_KEY_LENGTH.
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
См. также:
Preferences.getLong(String,long)

getLong

public long getLong(String key,
                    long def)

Реализует метод getLong согласно спецификации в Preferences.getLong(String,long).

Эта реализация вызывает get(key, null). Если возвращаемое значение не null, реализация пытается преобразовать его в значение типа long с помощью Long.parseLong(String). Если попытка успешна, возвращаемое значение возвращается этим методом. В противном случае возвращается def.

Определено в:
getLong в классе Preferences
Параметры:
key - ключ, связанное значение которого должно быть возвращено как long.
def - значение, которое должно быть возвращено в случае, если у этого узла настроек нет значения, связанного с key, или связанное значение не может быть интерпретировано как long.
Возвращает:
значение long, представленное строкой, связанной с key в этом узле настроек, или def, если связанное значение не существует или не может быть интерпретировано как long.
Исключение:
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
NullPointerException - если key равно null.
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
См. также:
Preferences.putLong(String,long), Preferences.get(String,String)

putBoolean

public void putBoolean(String key,
                       boolean value)

Реализует метод putBoolean в соответствии со спецификацией в Preferences.putBoolean(String,boolean).

Эта реализация преобразует value в строку с помощью String.valueOf(boolean) и вызывает put(String,String) на результат.

Определено в:
putBoolean в классе Preferences
Параметры:
key - ключ, с которым будет ассоциирована строковая форма значения.
value - значение, строковая форма которого будет ассоциирована с ключом.
Исключение:
NullPointerException - если ключ равен null.
IllegalArgumentException - если key.length() превышает MAX_KEY_LENGTH.
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
См. также:
Preferences.getBoolean(String,boolean), Preferences.get(String,String)

getBoolean

public boolean getBoolean(String key,
                          boolean def)

Реализует метод getBoolean в соответствии со спецификацией в Preferences.getBoolean(String,boolean).

Эта реализация вызывает get(key, null). Если возвращаемое значение не null, оно сравнивается с "true" с использованием String.equalsIgnoreCase(String). Если сравнение возвращает true, это вызов возвращает true. В противном случае, исходное возвращаемое значение сравнивается с "false", опять же с использованием String.equalsIgnoreCase(String). Если сравнение возвращает true, этот вызов возвращает false. В противном случае, этот вызов возвращает def.

Определено в:
getBoolean в классе Preferences
Параметры:
key - ключ, связанное значение которого должно быть возвращено как boolean.
def - значение, которое должно быть возвращено в случае, если у этого узла настроек нет значения, связанного с key, или связанное значение не может быть интерпретировано как boolean.
Возвращает:
значение boolean, представленное строкой, связанной с key в этом узле настроек, или def, если связанное значение не существует или не может быть интерпретировано как boolean.
Исключение:
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
NullPointerException - если key равно null.
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
См. также:
Preferences.get(String,String), Preferences.putBoolean(String,boolean)

putFloat

public void putFloat(String key,
                     float value)

Реализует метод putFloat в соответствии со спецификацией в Preferences.putFloat(String,float).

Эта реализация преобразует value в строку с помощью Float.toString(float) и вызывает put(String,String) на результате.

Определено в:
putFloat в классе Preferences
Параметры:
key - ключ, с которым будет ассоциирована строковая форма значения.
value - значение, строковая форма которого будет ассоциирована с ключом.
Исключение:
NullPointerException - если ключ равен null.
IllegalArgumentException - если key.length() превышает MAX_KEY_LENGTH.
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
См. также:
Preferences.getFloat(String,float)

getFloat

public float getFloat(String key,
                      float def)

Реализует метод getFloat в соответствии со спецификацией в Preferences.getFloat(String,float).

Эта реализация вызывает get(key, null). Если возвращаемое значение не null, реализация пытается преобразовать его в float с помощью Float.parseFloat(String). Если попытка успешна, возвращаемое значение возвращается этим методом. В противном случае, возвращается def.

Определено в:
getFloat в классе Preferences
Параметры:
key - ключ, связанное значение которого должно быть возвращено как float.
def - значение, которое должно быть возвращено в случае, если у этого узла настроек нет значения, связанного с key, или связанное значение не может быть интерпретировано как float.
Возвращает:
значение float, представленное строкой, связанной с key в этом узле настроек, или def, если связанное значение не существует или не может быть интерпретировано как float.
Исключение:
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
NullPointerException - если key равно null.
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
См. также:
Preferences.putFloat(String,float), Preferences.get(String,String)

putDouble

public void putDouble(String key,
                      double value)

Реализует метод putDouble в соответствии со спецификацией в Preferences.putDouble(String,double).

Эта реализация преобразует value в строку с помощью Double.toString(double) и вызывает put(String,String) на результате.

Определено в:
putDouble в классе Preferences
Параметры:
key - ключ, с которым будет ассоциирована строковая форма значения.
value - значение, строковая форма которого будет ассоциирована с ключом.
Исключение:
NullPointerException - если ключ равен null.
IllegalArgumentException - если key.length() превышает MAX_KEY_LENGTH.
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
IllegalStateException - если этот узел (или предковый) был удален методом removeNode().
См. также:
Preferences.getDouble(String,double)

getDouble

public double getDouble(String key,
                        double def)

Реализует метод getDouble в соответствии со спецификацией в Preferences.getDouble(String,double).

Эта реализация вызывает get(key, null). Если возвращаемое значение не null, реализация пытается преобразовать его в double с помощью Double.parseDouble(String). Если попытка успешна, возвращаемое значение возвращается этим методом. В противном случае, возвращается def.

Определено в:
getDouble в классе Preferences
Параметры:
key - ключ, связанное значение которого должно быть возвращено как double.
def - значение, которое должно быть возвращено в случае, если у этого узла предпочтений нет значения, связанного с key, или связанное значение не может быть интерпретировано как double.
Возвращает:
двойное значение, представленное строкой, связанной с key в этом узле предпочтений, или def, если связанное значение не существует или не может быть интерпретировано как double.
Выбрасывает:
IllegalStateException - если этот узел (или предковый) был удалён методом removeNode().
NullPointerException - если key равно null.
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
См. также:
Preferences.putDouble(String,double), Preferences.get(String,String)

putByteArray

public void putByteArray(String key,
                         byte[] value)

Реализует метод putByteArray согласно спецификации в Preferences.putByteArray(String,byte[]).

Определено в:
putByteArray в классе Preferences
Параметры:
key - ключ, с которым будет ассоциирована строковая форма значения.
value - значение, чья строковая форма будет ассоциирована с ключом.
Выбрасывает:
NullPointerException - если ключ или значение являются null.
IllegalArgumentException - если длина ключа превышает MAX_KEY_LENGTH или длина значения превышает MAX_VALUE_LENGTH*3/4.
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
IllegalStateException - если этот узел (или предковый) был удалён методом removeNode().
См. также:
Preferences.getByteArray(String,byte[]), Preferences.get(String,String)

getByteArray

public byte[] getByteArray(String key,
                           byte[] def)

Реализует метод getByteArray согласно спецификации в Preferences.getByteArray(String,byte[]).

Определено в:
getByteArray в классе Preferences
Параметры:
key - ключ, связанное значение которого должно быть возвращено в виде массива байтов.
def - значение, которое должно быть возвращено в случае, если у этого узла предпочтений нет значения, связанного с key, или связанное значение не может быть интерпретировано как массив байтов.
Возвращает:
массив байтов, представленный строкой, связанной с key в этом узле предпочтений, или def, если связанное значение не существует или не может быть интерпретировано как массив байтов.
Выбрасывает:
IllegalStateException - если этот узел (или предковый) был удалён методом removeNode().
NullPointerException - если key равно null. (Значение null для def разрешено.)
IllegalArgumentException - если ключ содержит нулевой управляющий символ, код U+0000.
См. также:
Preferences.get(String,String), Preferences.putByteArray(String,byte[])

keys

public String[] keys()
              throws BackingStoreException

Реализует метод keys согласно спецификации в Preferences.keys().

Эта реализация получает блокировку этого узла предпочтений, проверяет, что узел не был удалён, и вызывает keysSpi().

Определено в:
keys в классе Preferences
Возвращает:
массив ключей, имеющих связанное значение в этом узле предпочтений.
Выбрасывает:
BackingStoreException - если это действие не может быть выполнено из-за сбоя в хранилище или невозможности с ним связаться.
IllegalStateException - если этот узел (или предковый) был удалён методом removeNode() метода.

childrenNames

public String[] childrenNames()
                       throws BackingStoreException

Реализует метод children согласно спецификации в Preferences.childrenNames().

Эта реализация получает блокировку этого узла предпочтений, проверяет, что узел не был удалён, создаёт TreeSet, инициализированный именами уже кэшированных потомков (потомков в "кэше потомков" этого узла), вызывает childrenNamesSpi() и добавляет все полученные имена потомков в множество. Элементы набора TreeSet выгружаются в массив String с помощью метода toArray, и этот массив возвращается.

Определено в:
childrenNames в классе Preferences
Возвращает:
имена потомков этого узла предпочтений.
Выбрасывает:
BackingStoreException - если это действие не может быть выполнено из-за сбоя в хранилище или невозможности с ним связаться.
IllegalStateException - если этот узел (или предковый) был удалён методом removeNode() метода.
См. также:
cachedChildren()

cachedChildren

protected final AbstractPreferences[] cachedChildren()

Возвращает все известные неудалённые потомки этого узла.

Возвращает:
все известные неудалённые потомки этого узла.

parent

public Preferences parent()

Реализует метод parent согласно спецификации в Preferences.parent().

Эта реализация получает блокировку этого узла предпочтений, проверяет, что узел не был удалён, и возвращает значение родителя, переданное в конструктор этого узла.

Определено в:
parent в классе Preferences
Возвращает:
родитель этого узла предпочтений.
Выбрасывает:
IllegalStateException - если этот узел (или предковый) был удалён методом removeNode() метода.

node

public Preferences node(String path)

Реализует метод node согласно спецификации в Preferences.node(String).

Если path равно "", возвращается этот узел; если path равно "/", возвращается корень этого узла. Если первый символ в path не является '/', реализация разбивает path на токены и рекурсивно просматривает путь от этого узла до указанного узла, "потребляя" имя и косую черту из path на каждом шаге обхода. На каждом шаге текущий узел блокируется, и кэш потомков узла проверяется на наличие указанного узла. Если он не найден, проверяется, что длина имени не превышает MAX_NAME_LENGTH. Затем вызывается метод childSpi(String), и результат сохраняется в кэше потомков этого узла. Если поле newNode созданного объекта Preferences равно true, и есть какие-либо слушатели изменений узлов, событие уведомления добавляется в очередь для обработки потоком диспетчеризации событий.

Когда токенов больше нет, возвращается последнее значение, найденное в кэше потомков или возвращённое методом childSpi Этот метод. Если во время обхода два последовательных токена "/" или конечный токен является "/" (а не имя), выбрасывается соответствующее исключение IllegalArgumentException.

Если первый символ path является '/' (указывает абсолютный путь), блокировка этого узла предпочтений снимается до разбиения path на токены, и этот метод рекурсивно обходит путь, начиная с корня (а не с этого узла). Обход в остальном идентичен описанному для относительных путей. Снятие блокировки с этого узла перед началом обхода от корневого узла необходимо для предотвращения возможных тупиков, как указано в locking invariant.

Определено в:
node в классе Preferences
Параметры:
path - имя пути узла предпочтений, который нужно вернуть.
Возвращает:
указанный узел предпочтений.
Выбрасывает:
IllegalArgumentException - если имя пути некорректно (т.е., содержит несколько последовательных косых черт или заканчивается косой чертой и имеет более одного символа).
IllegalStateException - если этот узел (или предковый) был удалён методом removeNode() метода.
См. также:
Preferences.flush()

nodeExists

public boolean nodeExists(String path)
                   throws BackingStoreException

Реализует метод nodeExists согласно спецификации в Preferences.nodeExists(String).

Эта реализация очень похожа на node(String), за исключением того, что используется getChild(String) вместо childSpi(String).

Указано в:
nodeExists в классе Preferences
Параметры:
path - имя пути узла, существование которого нужно проверить.
Возвращает:
true, если указанный узел существует.
Выбрасывает:
BackingStoreException - если данная операция не может быть завершена из-за сбоя в хранилище или потери связи с ним.
IllegalArgumentException - если имя пути неверно (то есть оно содержит несколько последовательных символов косой черты или заканчивается символом косой черты и имеет более одного символа).
IllegalStateException - если этот узел (или его предок) был удален методом removeNode(), и pathname не является пустой строкой ("").

removeNode

public void removeNode()
                throws BackingStoreException

Реализует метод removeNode() в соответствии со спецификацией в Preferences.removeNode().

Эта реализация проверяет, является ли этот узел корневым; если да, то выбрасывает соответствующее исключение. Затем она блокирует родителя этого узла и вызывает рекурсивный вспомогательный метод, который обходит поддерево, укоренённое в этом узле. Вспомогательный рекурсивный метод блокирует узел, на котором он был вызван, проверяет, не был ли он уже удалён, и затем гарантирует, что все его дочерние элементы кэшированы: вызывается метод childrenNamesSpi(), и каждое возвращённое имя дочернего элемента проверяется на наличие в кэше дочерних элементов. Если дочерний элемент ещё не кэширован, вызывается метод childSpi(String) для создания экземпляра Preferences для него, и этот экземпляр помещается в кэш дочерних элементов. Затем вспомогательный метод рекурсивно вызывает себя для каждого узла, содержащегося в кэше дочерних элементов. После этого он вызывает removeNodeSpi(), помечает себя как удалённый и удаляет себя из кэша дочерних элементов своего родителя. Наконец, если есть какие-либо слушатели изменений узлов, он в очереди уведомление об обработке в потоке диспетчеризации событий.

Обратите внимание, что вспомогательный метод всегда вызывается со всеми предками до «самого близкого не удалённого предка» заблокированными.

Указано в:
removeNode в классе Preferences
Выбрасывает:
IllegalStateException - если этот узел (или его предок) уже был удалён методом removeNode().
UnsupportedOperationException - если этот метод вызван на корневом узле.
BackingStoreException - если данная операция не может быть завершена из-за сбоя в хранилище или потери связи с ним.
См. также:
Preferences.flush()

name

public String name()

Реализует метод name в соответствии со спецификацией в Preferences.name().

Эта реализация просто возвращает имя, переданное в конструктор этого узла.

Указано в:
name в классе Preferences
Возвращает:
имя узла предпочтения, относительно его родителя.

absolutePath

public String absolutePath()

Реализует метод absolutePath в соответствии со спецификацией в Preferences.absolutePath().

Эта реализация просто возвращает абсолютное имя пути, вычисленное в момент создания этого узла (на основе имени, переданного конструктору этого узла, и имён, переданных конструкторам предков этого узла).

Указано в:
absolutePath в классе Preferences
Возвращает:
абсолютное имя пути узла предпочтения.

isUserNode

public boolean isUserNode()

Реализует метод isUserNode в соответствии со спецификацией в Preferences.isUserNode().

Эта реализация сравнивает корневой узел этого узла (который хранится в частном поле) со значением, возвращаемым методом Preferences.userRoot(). Если две ссылки на объекты идентичны, этот метод возвращает true.

Указано в:
isUserNode в классе Preferences
Возвращает:
true если этот узел предпочтений находится в дереве пользовательских предпочтений, false если он находится в дереве системных предпочтений.

putSpi

protected abstract void putSpi(String key,
                               String value)

Поместить заданное ассоциацию ключ-значение в этот узел предпочтений. Гарантируется, что key и value не null и имеют допустимую длину. Также гарантируется, что этот узел не был удалён. (Реализатор не должен проверять ни одно из этих условий).

Этот метод вызывается с заблокированным узлом.

Параметры:
key - ключ
value - значение

getSpi

protected abstract String getSpi(String key)

Возвращает значение, связанное с указанным ключом в этом узле предпочтений, или null если для этого ключа нет ассоциации или ассоциация не может быть определена в данный момент. Гарантируется, что key не null. Также гарантируется, что этот узел не был удалён. (Реализатор не должен проверять ни одно из этих условий).

В общем случае этот метод не должен выбрасывать исключение при любых обстоятельствах. Однако если он всё же выбрасывает исключение, исключение будет перехвачено и обработано как значение возврата null.

Этот метод вызывается с заблокированным узлом.

Параметры:
key - ключ
Возвращает:
значение, связанное с указанным ключом в этом узле предпочтений, или null если для этого ключа нет ассоциации или ассоциация не может быть определена в данный момент.

removeSpi

protected abstract void removeSpi(String key)

Удаляет ассоциацию (если она есть) для указанного ключа в этом узле предпочтений. Гарантируется, что key не null. Также гарантируется, что этот узел не был удалён. (Реализатор не должен проверять ни одно из этих условий).

Этот метод вызывается с заблокированным узлом.

Параметры:
key - ключ

removeNodeSpi

protected abstract void removeNodeSpi()
                               throws BackingStoreException

Удаляет этот узел предпочтений, делая его недействительным и любые предпочтения, которые он содержит. У названного дочернего элемента не будет потомков в момент вызова (то есть метод Preferences.removeNode() вызывает этот метод по очереди сверху вниз, удаляя каждого потомка узла перед удалением самого узла).

Этот метод вызывается с заблокированным этим узлом и его родителем (и всеми предками, которые удаляются в результате одного вызова Preferences.removeNode()).

Удаление узла не обязательно должно стать постоянным до вызова метода flush в этом узле (или предке).

Если этот узел выбрасывает BackingStoreException, исключение будет распространяться за пределы вызова removeNode().

Выбрасывает:
BackingStoreException - если данная операция не может быть завершена из-за сбоя в хранилище или потери связи с ним.

keysSpi

protected abstract String[] keysSpi()
                             throws BackingStoreException

Возвращает все ключи, которые имеют связанное значение в этом узле предпочтений. (Возвращаемый массив будет нулевой длины, если в этом узле нет предпочтений). Гарантируется, что этот узел не был удалён.

Этот метод вызывается с заблокированным узлом.

Если этот узел выбрасывает BackingStoreException, исключение будет распространяться за пределы вызова keys().

Возвращает:
массив ключей, которые имеют связанное значение в этом узле предпочтений.
Выбрасывает:
BackingStoreException - если данная операция не может быть завершена из-за сбоя в хранилище или потери связи с ним.

childrenNamesSpi

protected abstract String[] childrenNamesSpi()
                                      throws BackingStoreException

Возвращает имена дочерних узлов этого узла предпочтений. (Возвращаемый массив будет нулевой длины, если у этого узла нет дочерних элементов). Этот метод не обязан возвращать имена узлов, уже кэшированных, но может это сделать без вреда.

Этот метод вызывается с заблокированным узлом.

Если этот узел выбрасывает BackingStoreException, исключение будет распространяться за пределы вызова childrenNames().

Возвращает:
массив, содержащий имена дочерних узлов этого узла предпочтений.
Выбрасывает:
BackingStoreException - если данная операция не может быть завершена из-за сбоя в хранилище или потери связи с ним.

getChild

protected AbstractPreferences getChild(String nodeName)
                                throws BackingStoreException

Возвращает дочерний узел по имени, если он существует, или null если его нет. Гарантируется, что nodeName не null, не пусто, не содержит символа косой черты ('/'), и не длиннее, чем Preferences.MAX_NAME_LENGTH символов. Также гарантируется, что этот узел не был удалён. (Реализатор не обязан проверять ни одно из этих условий, если он выбирает переопределение этого метода).

Наконец, гарантируется, что возвращённый по имени узел не был возвращён предыдущим вызовом этого метода или childSpi(java.lang.String) после последнего момента его удаления. Иными словами, кэшированное значение всегда будет использоваться вместо вызова этого метода. (Реализатор не обязан поддерживать свой собственный кэш ранее возвращённых дочерних элементов, если он выбирает переопределение этого метода).

Эта реализация получает блокировку этого узла предпочтений, вызывает childrenNames() для получения массива имён дочерних узлов этого узла и итерируется по массиву, сравнивая имя каждого дочернего узла с заданным именем узла. Если дочерний узел имеет нужное имя, вызывается метод childSpi(String), и возвращаемый узел. Если итерация завершается без поиска указанного имени, возвращается null.

Параметры:
nodeName - имя дочернего узла, который нужно найти.
Возвращает:
дочерний узел по имени, если он существует, или null, если его нет.
Выбрасывает:
BackingStoreException - если данная операция не может быть завершена из-за сбоя в хранилище или потери связи с ним.

childSpi

protected abstract AbstractPreferences childSpi(String name)

Возвращает дочерний узел с заданным именем в этом узле предпочтений, создавая его, если он ещё не существует. Гарантируется, что name не равен null, не пуст, не содержит косой черты ('/') и его длина не превышает Preferences.MAX_NAME_LENGTH символов. Также гарантируется, что этот узел не удалён. (Реализатор не обязан проверять ни одно из этих условий.)

Наконец, гарантируется, что указанный узел не был возвращён предыдущим вызовом этого метода или getChild(String) после последнего момента его удаления. Другими словами, кэшированное значение всегда будет использовано вместо вызова этого метода. Подклассы не обязаны поддерживать свой собственный кэш ранее возвращённых дочерних узлов.

Реализатор должен гарантировать, что возвращённый узел не удалён. Если подобный дочерний узел в этом узле был ранее удалён, реализатор должен вернуть новый, только что созданный AbstractPreferences узел; после удаления узел AbstractPreferences не может быть "возвращён к жизни".

Если этот метод приводит к созданию узла, этот узел не гарантируется как постоянный до тех пор, пока метод flush не будет вызван на этом узле или одном из его предков (или потомков).

Этот метод вызывается с захваченным замком на этом узле.

Parameters:
name - Имя дочернего узла для возвращения, относительно этого узла предпочтений.
Returns:
Дочерний узел с заданным именем.

toString

public String toString()

Возвращает абсолютный путь к этому узлу предпочтений.

Specified by:
toString в классе Preferences
Returns:
строковое представление объекта.

sync

public void sync()
          throws BackingStoreException

Реализует метод sync в соответствии со спецификацией в Preferences.sync().

Эта реализация вызывает рекурсивный вспомогательный метод, который захватывает замок на этом узле, вызывает syncSpi() на нём, освобождает замок, и рекурсивно вызывает этот метод для каждого "кэшированного дочернего узла". Кэшированный дочерний узел — это дочерний узел этого узла, созданный в этой виртуальной машине и не удалённый впоследствии. По сути, этот метод выполняет обход в глубину "кэшированного поддерева", укоренённого в этом узле, вызывая syncSpi() для каждого узла в поддереве, пока заблокирован только этот узел. Обратите внимание, что syncSpi() вызывается сверху вниз.

Specified by:
sync в классе Preferences
Throws:
BackingStoreException - если эта операция не может быть завершена из-за сбоя в хранилище данных или невозможности с ним взаимодействовать.
IllegalStateException - если этот узел (или предок) был удалён методом removeNode().
See Also:
flush()

syncSpi

protected abstract void syncSpi()
                         throws BackingStoreException

Этот метод вызывается с захваченным замком на этом узле. Контракт этого метода заключается в синхронизации любых кэшированных предпочтений, хранящихся в этом узле, с хранящимися в хранилище данных. (Совершенно возможно, что этого узла нет в хранилище данных, либо потому, что он был удалён другой виртуальной машиной, либо потому, что он ещё не был создан.) Обратите внимание, что этот метод не должен синхронизировать предпочтения в дочерних узлах этого узла. Если хранилище данных естественным образом синхронизирует всё поддерево сразу, реализатор должен переопределить sync(), а не только этот метод.

Если этот узел генерирует BackingStoreException, исключение будет распространено за пределы вызова sync().

Throws:
BackingStoreException - если эта операция не может быть завершена из-за сбоя в хранилище данных или невозможности с ним взаимодействовать.

flush

public void flush()
           throws BackingStoreException

Реализует метод flush в соответствии со спецификацией в Preferences.flush().

Эта реализация вызывает рекурсивный вспомогательный метод, который захватывает замок на этом узле, вызывает flushSpi() на нём, освобождает замок и рекурсивно вызывает этот метод для каждого "кэшированного дочернего узла". Кэшированный дочерний узел — это дочерний узел этого узла, созданный в этой виртуальной машине и не удалённый впоследствии. По сути, этот метод выполняет обход в глубину "кэшированного поддерева", укоренённого в этом узле, вызывая flushSpi() для каждого узла в поддереве, пока заблокирован только этот узел. Обратите внимание, что flushSpi() вызывается сверху вниз.

Если этот метод вызывается для узла, который был удалён методом removeNode(), flushSpi() вызывается для этого узла, но не для других.

Specified by:
flush в классе Preferences
Throws:
BackingStoreException - если эта операция не может быть завершена из-за сбоя в хранилище данных или невозможности с ним взаимодействовать.
See Also:
flush()

flushSpi

protected abstract void flushSpi()
                          throws BackingStoreException

Этот метод вызывается с захваченным замком на этом узле. Контракт этого метода заключается в принудительной синхронизации любых кэшированных изменений содержимого этого узла предпочтений с хранилищем данных, гарантируя их постоянство. (Совершенно возможно, что этого узла нет в хранилище данных, либо потому, что он был удалён другой виртуальной машиной, либо потому, что он ещё не был создан.) Обратите внимание, что этот метод не должен сохранять предпочтения в дочерних узлах этого узла. Если хранилище данных естественным образом сохраняет всё поддерево сразу, реализатор должен переопределить flush(), а не только этот метод.

Если этот узел генерирует BackingStoreException, исключение будет распространено за пределы вызова flush().

Throws:
BackingStoreException - если эта операция не может быть завершена из-за сбоя в хранилище данных или невозможности с ним взаимодействовать.

isRemoved

protected boolean isRemoved()

Возвращает true если этот узел (или предок) был удалён методом removeNode(). Этот метод захватывает замок на этом узле перед возвращением содержимого приватного поля, используемого для отслеживания этого состояния.

Returns:
true если этот узел (или предок) был удалён методом removeNode().

exportNode

public void exportNode(OutputStream os)
                throws IOException,
                       BackingStoreException

Реализует метод exportNode в соответствии со спецификацией в Preferences.exportNode(OutputStream).

Specified by:
exportNode в классе Preferences
Parameters:
os - поток вывода, на который необходимо вывести XML-документ.
Throws:
IOException - если запись в указанный поток вывода приводит к IOException.
BackingStoreException - если данные предпочтений не могут быть прочитаны из хранилища данных.
See Also:
Preferences.importPreferences(InputStream)

exportSubtree

public void exportSubtree(OutputStream os)
                   throws IOException,
                          BackingStoreException

Реализует метод exportSubtree в соответствии со спецификацией в Preferences.exportSubtree(OutputStream).

Specified by:
exportSubtree в классе Preferences
Parameters:
os - поток вывода, на который необходимо вывести XML-документ.
Throws:
IOException - если запись в указанный поток вывода приводит к IOException.
BackingStoreException - если данные предпочтений не могут быть прочитаны из хранилища данных.
See Also:
Preferences.importPreferences(InputStream), Preferences.exportNode(OutputStream)

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.prefs/java/util/prefs/AbstractPreferences.html

Spec-Zone .ru
спецификации, руководства, описания, API