Spec-Zone .ru
спецификации, руководства, описания, API
|
public abstract class AbstractPreferences extends Preferences
Preferences
class, значительно ослабляя задачу реализации этого. Этот class для разработчиков 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 должны возвратить false, поскольку возврат true подразумевал бы, что все предыдущие операции были успешно сделаны постоянными.
Есть одно обстоятельство, при котором putSpi, removeSpi and childSpi должен выдать исключение: если вызывающая сторона испытывает недостаток в достаточных полномочиях на базовой операционной системе, чтобы выполнить требуемую работу. Это, например, произойдет на большинстве систем, если непривилегированный пользователь попытается изменить установки системы. (Необходимые полномочия изменятся от реализации до реализации. На некоторых реализациях они - право изменить содержание некоторого каталога в файловой системе; на других они - право изменить содержание некоторого ключа в реестре.) При любом из этих обстоятельств, это обычно был бы нежелательный, чтобы позволить программе продолжать выполняться, как будто эти операции стали бы постоянными в более позднее время. В то время как реализации не обязаны выдавать исключение при этих обстоятельствах, они поощряются сделать так. A SecurityException
было бы соответствующим.
Большинство методов SPI требует, чтобы реализация считала или записала информацию в привилегированном узле. Конструктор должен остерегаться факта, что другой VM, возможно, одновременно удалил этот узел из запоминающего устройства. Это - обязанность реализации воссоздать узел, если это было удалено.
Примечание реализации: В значении по умолчанию Sun реализации Preferences идентификационные данные пользователя наследованы от базовой операционной системы и не изменяются для времени жизни виртуальной машины. Это распознается, что у стороны сервера реализации Preferences может быть пользовательское изменение идентификационных данных от запроса до запроса, который неявно передают к методам Preferences через использование помех ThreadLocal
экземпляр. Авторы таких реализаций строго поощряются определить пользователя в то время, когда к предпочтению получают доступ (например get(String,String)
или put(String,String)
метод) вместо того, чтобы постоянно связать пользователя с каждым экземпляром Preferences. Последние конфликты поведения с нормальным использованием Preferences и привели бы к большому беспорядку.
Preferences
Модификатор и Тип | Поле и Описание |
---|---|
protected Object |
блокировка
Объект, монитор которого используется, чтобы заблокировать этот узел.
|
protected boolean |
newNode
Этим полем должен быть true, если бы этот узел не существовал в запоминающем устройстве до создания этого объекта.
|
MAX_KEY_LENGTH, MAX_NAME_LENGTH, MAX_VALUE_LENGTH
Модификатор | Конструктор и Описание |
---|---|
protected |
AbstractPreferences(AbstractPreferences parent, String name)
Создает привилегированный узел с указанным родителем и указанным именем относительно его родителя.
|
Модификатор и Тип | Метод и Описание |
---|---|
Строка |
absolutePath()
Реализует метод absolutePath согласно спецификации в
Preferences.absolutePath() . |
void |
addNodeChangeListener(NodeChangeListener ncl)
Регистрирует указанного слушателя, чтобы получить события изменения узла для этого узла.
|
void |
addPreferenceChangeListener(PreferenceChangeListener pcl)
Регистрирует указанного слушателя, чтобы получить привилегированные события изменения для этого привилегированного узла.
|
protected AbstractPreferences[] |
cachedChildren()
Возвраты все известные неудаленные дочерние элементы этого узла.
|
Строка[] |
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()
Этот метод вызывается с этим заблокированным узлом.
|
Строка |
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() . |
Строка[] |
keys()
Реализует метод keys согласно спецификации в
Preferences.keys() . |
protected abstract String[] |
keysSpi()
Возвраты все ключи, у которых есть присваиваемое значение в этом привилегированном узле.
|
Строка |
name()
Реализует метод name согласно спецификации в
Preferences.name() . |
Предпочтение |
node(String path)
Реализует метод node согласно спецификации в
Preferences.node(String) . |
boolean |
nodeExists(String path)
Реализует метод nodeExists согласно спецификации в
Preferences.nodeExists(String) . |
Предпочтение |
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() . |
void |
removeNodeChangeListener(NodeChangeListener ncl)
Удаляет указанный NodeChangeListener, таким образом, он больше не получает события изменения.
|
protected abstract void |
removeNodeSpi()
Удаляет этот привилегированный узел, лишая законной силы это и любое предпочтение, которое это содержит.
|
void |
removePreferenceChangeListener(PreferenceChangeListener pcl)
Удаляет указанного привилегированного слушателя изменения, таким образом, это больше не получает привилегированные события изменения.
|
protected abstract void |
removeSpi(String key)
Удалите ассоциацию (если любой) для указанного ключа в этом привилегированном узле.
|
void |
sync()
Реализует метод sync согласно спецификации в
Preferences.sync() . |
protected abstract void |
syncSpi()
Этот метод вызывается с этим заблокированным узлом.
|
Строка |
toString()
Возвращает абсолютный путь этого привилегированного узла.
|
importPreferences, systemNodeForPackage, systemRoot, userNodeForPackage, userRoot
protected boolean newNode
protected final Object lock
protected AbstractPreferences(AbstractPreferences parent, String name)
parent
- родитель этого привилегированного узла, или нуль, если это - корень.name
- имя этого привилегированного узла, относительно его родителя, или "", если это - корень.IllegalArgumentException
- если name содержит наклонную черту ('/'), или parent является null, и именем не является "".public void put(String key, String value)
Preferences.put(String,String)
. Эта реализация проверяет, что ключ и значение являются законными, получает эту привилегированную блокировку узла, проверки, что узел не был удален, вызывают putSpi(String,String)
, и если есть какие-либо привилегированные слушатели изменения, ставит в очередь событие уведомления для того, чтобы обработать событием, диспетчеризируют поток.
put
в class Preferences
key
- ключ, с которым должно быть связано указанное значение.value
- значение, которое будет связано с указанным ключом.NullPointerException
- если ключом или значением является null.IllegalArgumentException
- если key.length() превышает MAX_KEY_LENGTH или если value.length превышает MAX_VALUE_LENGTH.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.public String get(String key, String def)
Preferences.get(String,String)
. Эта реализация сначала проверяет, чтобы видеть, является ли key null, бросающий NullPointerException, если это верно. Затем это получает эту привилегированную блокировку узла, проверки, что узел не был удален, вызывают getSpi(String)
, и возвращает результат, если вызов getSpi не возвращает null или выдает исключение, когда этот вызов возвращает def.
get
в class Preferences
key
- ключ, присваиваемое значение которого должно быть возвращено.def
- значение, которое будет возвращено, когда у этого привилегированного узла нет никакого значения, связанного с key.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.NullPointerException
- если ключом является null. (Значение по умолчанию null разрешается.)public void remove(String key)
Preferences.remove(String)
. Эта реализация получает эту привилегированную блокировку узла, проверки, что узел не был удален, вызывают removeSpi(String)
и если есть какие-либо привилегированные слушатели изменения, ставит в очередь событие уведомления для того, чтобы обработать событием, диспетчеризируют поток.
remove
в class Preferences
key
- ключ, отображение которого должно быть удалено из привилегированного узла.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.NullPointerException
- если key является null..public void clear() throws BackingStoreException
Preferences.clear()
. Эта реализация получает эту привилегированную блокировку узла, вызывает keys()
получить массив ключей, и выполняет итерации по вызову массива remove(String)
на каждом ключе.
clear
в class Preferences
BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.Preferences.removeNode()
public void putInt(String key, int value)
Preferences.putInt(String,int)
. Эта реализация преобразовывает value в строку с Integer.toString(int)
и вызывает put(String,String)
на результате.
putInt
в class Preferences
key
- ключ, с которым должна быть связана строковая форма имеющая значение.value
- оцените, чья строковая форма должна быть связана с ключом.NullPointerException
- если ключом является null.IllegalArgumentException
- если key.length() превышает MAX_KEY_LENGTH.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.Preferences.getInt(String,int)
public int getInt(String key, int def)
Preferences.getInt(String,int)
. Эта реализация вызывает get(key, null)
. Если возвращаемое значение является ненулем, реализация пытается преобразовать это в int с Integer.parseInt(String)
. Если попытка успешно выполняется, возвращаемое значение возвращается этим методом. Иначе, def возвращается.
getInt
в class Preferences
key
- ключ, присваиваемое значение которого должно быть возвращено как интервал.def
- значение, которое будет возвращено, когда у этого привилегированного узла нет никакого значения, связанного с key или присваиваемым значением, не может быть интерпретировано как интервал.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.NullPointerException
- если key является null.Preferences.putInt(String,int)
, Preferences.get(String,String)
public void putLong(String key, long value)
Preferences.putLong(String,long)
. Эта реализация преобразовывает value в строку с Long.toString(long)
и вызывает put(String,String)
на результате.
putLong
в class Preferences
key
- ключ, с которым должна быть связана строковая форма имеющая значение.value
- оцените, чья строковая форма должна быть связана с ключом.NullPointerException
- если ключом является null.IllegalArgumentException
- если key.length() превышает MAX_KEY_LENGTH.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.Preferences.getLong(String,long)
public long getLong(String key, long def)
Preferences.getLong(String,long)
. Эта реализация вызывает get(key, null)
. Если возвращаемое значение является ненулем, реализация пытается преобразовать это в long с Long.parseLong(String)
. Если попытка успешно выполняется, возвращаемое значение возвращается этим методом. Иначе, def возвращается.
getLong
в class Preferences
key
- ключ, присваиваемое значение которого должно быть возвращено как длинное.def
- значение, которое будет возвращено, когда у этого привилегированного узла нет никакого значения, связанного с key или присваиваемым значением, не может быть интерпретировано как длинное.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.NullPointerException
- если key является null.Preferences.putLong(String,long)
, Preferences.get(String,String)
public void putBoolean(String key, boolean value)
Preferences.putBoolean(String,boolean)
. Эта реализация преобразовывает value в строку с String.valueOf(boolean)
и вызывает put(String,String)
на результате.
putBoolean
в class Preferences
key
- ключ, с которым должна быть связана строковая форма имеющая значение.value
- оцените, чья строковая форма должна быть связана с ключом.NullPointerException
- если ключом является null.IllegalArgumentException
- если key.length() превышает MAX_KEY_LENGTH.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.Preferences.getBoolean(String,boolean)
, Preferences.get(String,String)
public boolean getBoolean(String key, boolean def)
Preferences.getBoolean(String,boolean)
. Эта реализация вызывает get(key, null)
. Если возвращаемое значение является ненулем, это по сравнению с использованием "true" String.equalsIgnoreCase(String)
. Если сравнение возвращает true, этот вызов возвращает true. Иначе, исходное возвращаемое значение по сравнению с "false", снова используя String.equalsIgnoreCase(String)
. Если сравнение возвращает true, этот вызов возвращает false. Иначе, этот вызов возвращает def.
getBoolean
в class Preferences
key
- ключ, присваиваемое значение которого должно быть возвращено как булево.def
- значение, которое будет возвращено, когда у этого привилегированного узла нет никакого значения, связанного с key или присваиваемым значением, не может быть интерпретировано как булево.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.NullPointerException
- если key является null.Preferences.get(String,String)
, Preferences.putBoolean(String,boolean)
public void putFloat(String key, float value)
Preferences.putFloat(String,float)
. Эта реализация преобразовывает value в строку с Float.toString(float)
и вызывает put(String,String)
на результате.
putFloat
в class Preferences
key
- ключ, с которым должна быть связана строковая форма имеющая значение.value
- оцените, чья строковая форма должна быть связана с ключом.NullPointerException
- если ключом является null.IllegalArgumentException
- если key.length() превышает MAX_KEY_LENGTH.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.Preferences.getFloat(String,float)
public float getFloat(String key, float def)
Preferences.getFloat(String,float)
. Эта реализация вызывает get(key, null)
. Если возвращаемое значение является ненулем, реализация пытается преобразовать это в float с Float.parseFloat(String)
. Если попытка успешно выполняется, возвращаемое значение возвращается этим методом. Иначе, def возвращается.
getFloat
в class Preferences
key
- ключ, присваиваемое значение которого должно быть возвращено как плавание.def
- значение, которое будет возвращено, когда у этого привилегированного узла нет никакого значения, связанного с key или присваиваемым значением, не может быть интерпретировано как плавание.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.NullPointerException
- если key является null.Preferences.putFloat(String,float)
, Preferences.get(String,String)
public void putDouble(String key, double value)
Preferences.putDouble(String,double)
. Эта реализация преобразовывает value в строку с Double.toString(double)
и вызывает put(String,String)
на результате.
putDouble
в class Preferences
key
- ключ, с которым должна быть связана строковая форма имеющая значение.value
- оцените, чья строковая форма должна быть связана с ключом.NullPointerException
- если ключом является null.IllegalArgumentException
- если key.length() превышает MAX_KEY_LENGTH.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.Preferences.getDouble(String,double)
public double getDouble(String key, double def)
Preferences.getDouble(String,double)
. Эта реализация вызывает get(key, null)
. Если возвращаемое значение является ненулем, реализация пытается преобразовать это в double с Double.parseDouble(String)
. Если попытка успешно выполняется, возвращаемое значение возвращается этим методом. Иначе, def возвращается.
getDouble
в class Preferences
key
- ключ, присваиваемое значение которого должно быть возвращено как двойное.def
- значение, которое будет возвращено, когда у этого привилегированного узла нет никакого значения, связанного с key или присваиваемым значением, не может быть интерпретировано как двойное.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.NullPointerException
- если key является null.Preferences.putDouble(String,double)
, Preferences.get(String,String)
public void putByteArray(String key, byte[] value)
Preferences.putByteArray(String,byte[])
.putByteArray
в class Preferences
key
- ключ, с которым должна быть связана строковая форма имеющая значение.value
- оцените, чья строковая форма должна быть связана с ключом.NullPointerException
- если ключом или значением является null.IllegalArgumentException
- если key.length () превышает MAX_KEY_LENGTH или если value.length превышает MAX_VALUE_LENGTH*3/4.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.Preferences.getByteArray(String,byte[])
, Preferences.get(String,String)
public byte[] getByteArray(String key, byte[] def)
Preferences.getByteArray(String,byte[])
.getByteArray
в class Preferences
key
- ключ, присваиваемое значение которого должно быть возвращено как байтовый массив.def
- значение, которое будет возвращено, когда у этого привилегированного узла нет никакого значения, связанного с key или присваиваемым значением, не может быть интерпретировано как байтовый массив.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.NullPointerException
- если key является null. (Значение null для def разрешается.)Preferences.get(String,String)
, Preferences.putByteArray(String,byte[])
public String[] keys() throws BackingStoreException
Preferences.keys()
. Эта реализация получает эту привилегированную блокировку узла, проверки, что узел не был удален и вызывает keysSpi()
.
keys
в class Preferences
BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.public String[] childrenNames() throws BackingStoreException
Preferences.childrenNames()
. Эта реализация получает эту привилегированную блокировку узла, проверки, что узел не был удален, создают TreeSet, инициализированный к именам дочерних элементов, уже кэшируемых (дочерние элементы в "дочернем кэше" этого узла), вызывают childrenNamesSpi()
, и добавляет все возвращенные дочерние имена в набор. Элементы древовидного набора выводятся в массив String, использующий метод toArray, и этот массив возвращается.
childrenNames
в class Preferences
BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.cachedChildren()
protected final AbstractPreferences[] cachedChildren()
public Preferences parent()
Preferences.parent()
. Эта реализация получает эту привилегированную блокировку узла, проверки, что узел не был удален и возвращает родительское значение, которое передали конструктору этого узла.
parent
в class Preferences
IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.public Preferences node(String path)
Preferences.node(String)
. Эта реализация получает эту привилегированную блокировку узла и проверяет, что узел не был удален. Если path является "", этот узел возвращается; если path является "/", корень этого узла возвращается. Если первым символом в path не является '/', реализация повреждает path в маркеры и рекурсивно пересекает путь от этого узла до именованного узла, "используя" имя и наклонную черту с path в каждом шаге обхода. В каждом шаге блокируется текущий узел, и дочерний кэш узла проверяется на именованный узел. Если это не находится, имя проверяется, чтобы удостовериться, что его длина не превышает MAX_NAME_LENGTH. Затем childSpi(String)
метод вызывается, и результат, сохраненный в дочернем кэше этого узла. Если недавно создаваемый объект Preferences newNode
полем является true и есть любые слушатели изменения узла, событие уведомления ставится в очередь для того, чтобы обработать событием, диспетчеризируют поток.
То, когда нет больше маркеров, последнее значение, найденное в дочернем кэше, или возвратилось childSpi, возвращается этим методом. Если во время обхода, два маркера "/" происходят последовательно, или заключительным маркером является "/" (а не имя), соответствующий IllegalArgumentException бросается.
Если первым символом path является '/' (указание на абсолютный путь), эта привилегированная блокировка узла отбрасывается до повреждения path в маркеры, и этот метод рекурсивно пересекает путь, запускающийся с корня (вместо того, чтобы запуститься с этого узла). Обход иначе идентичен тому, описанному для относительных путей. Отбрасывание блокировки на этом узле до открытия обхода в корневом узле важно, чтобы избежать возможности мертвой блокировки, согласно locking invariant
.
node
в class Preferences
path
- путь привилегированного узла, чтобы возвратиться.IllegalArgumentException
- если путь недопустим (то есть, он содержит многократные последовательные символы наклонной черты, или заканчивается символом наклонной черты и является больше чем одним символом долго).IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.Preferences.flush()
public boolean nodeExists(String path) throws BackingStoreException
Preferences.nodeExists(String)
. Эта реализация очень подобна node(String)
, за исключением того, что getChild(String)
используется вместо childSpi(String)
.
nodeExists
в class Preferences
path
- путь узла, существование которого должно быть проверено.BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.IllegalArgumentException
- если путь недопустим (то есть, он содержит многократные последовательные символы наклонной черты, или заканчивается символом наклонной черты и является больше чем одним символом долго).IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод и pathname не являются пустой строкой ("").public void removeNode() throws BackingStoreException
Preferences.removeNode()
. Эти проверки реализации, чтобы видеть, что этот узел является корнем; если так, это выдает соответствующее исключение. Затем, это блокирует родителя этого узла, и вызывает рекурсивный метод помощника, который пересекает поддерево, базированное в этом узле. Рекурсивный метод блокирует узел, на котором его вызвали, проверки, что он не был уже удален, и затем гарантирует, что все его дочерние элементы кэшируются: childrenNamesSpi()
метод вызывается, и каждое возвращенное дочернее имя проверяется на включение в дочернем кэше. Если дочерний элемент уже не кэшируется, childSpi(String)
метод вызывается, чтобы создать экземпляр Preferences для этого, и этот экземпляр помещается в дочерний кэш. Затем вызовы метода помощника самостоятельно рекурсивно на каждом узле содержатся в его дочернем кэше. Затем, это вызывает removeNodeSpi()
, отмечает себя как удалено, и удаляет себя из дочернего кэша его родителя. Наконец, если есть какие-либо слушатели изменения узла, это ставит в очередь событие уведомления для того, чтобы обработать событием, диспетчеризируют поток.
Отметьте, что метод помощника всегда вызывается со всеми предками до "самого близкого неудаленного предка", заблокированного.
removeNode
в class Preferences
IllegalStateException
- если этот узел (или предок) был уже удален с removeNode()
метод.UnsupportedOperationException
- если этот метод вызывается на корневой узел.BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.Preferences.flush()
public String name()
Preferences.name()
. Эта реализация просто возвращает имя, которое передали конструктору этого узла.
name
в class Preferences
public String absolutePath()
Preferences.absolutePath()
. Эта реализация просто возвращает абсолютный путь, который был вычислен в то время, когда этот узел был создан (основанный на имени, которое передали конструктору этого узла, и именам, которые передали конструкторам предков этого узла).
absolutePath
в class Preferences
public boolean isUserNode()
Preferences.isUserNode()
. Эта реализация сравнивает корневой узел этого узла (который сохранен в частном поле) со значением, возвращенным Preferences.userRoot()
. Если эти две ссылки на объект идентичны, этот метод возвращает true.
isUserNode
в class Preferences
public void addPreferenceChangeListener(PreferenceChangeListener pcl)
Preferences
Preferences.removeNode()
метод, который генерирует событие изменения узла. Привилегированные события изменения сгенерированы методом clear.) События только гарантируются для изменений, произведенных в пределах той же самой JVM как зарегистрированный слушатель, хотя некоторые реализации могут генерировать события для изменений, произведенных вне этой JVM. События могут быть сгенерированы прежде, чем изменения делались персистентными. События не сгенерированы, когда предпочтение изменяется в потомках этого узла; вызывающая сторона, требуя таких событий должна зарегистрироваться в каждом потомке.
addPreferenceChangeListener
в class Preferences
pcl
- Привилегированный слушатель изменения, чтобы добавить.Preferences.removePreferenceChangeListener(PreferenceChangeListener)
, Preferences.addNodeChangeListener(NodeChangeListener)
public void removePreferenceChangeListener(PreferenceChangeListener pcl)
Preferences
removePreferenceChangeListener
в class Preferences
pcl
- Привилегированный слушатель изменения, чтобы удалить.Preferences.addPreferenceChangeListener(PreferenceChangeListener)
public void addNodeChangeListener(NodeChangeListener ncl)
Preferences
Preferences.removeNode()
результаты вызова в многократных событиях изменения узла, один для каждого узла в поддереве базировались в удаленном узле.) События только гарантируются для изменений, произведенных в пределах той же самой JVM как зарегистрированный слушатель, хотя некоторые реализации могут генерировать события для изменений, произведенных вне этой JVM. События могут быть сгенерированы прежде, чем изменения стали постоянными. События не сгенерированы, когда косвенные потомки этого узла добавляются или удаляются; вызывающая сторона, требуя таких событий должна зарегистрироваться в каждом потомке.
Немного гарантий могут быть сделаны относительно создания узла. Поскольку узлы создаются неявно на доступ, возможно, не выполнимо для реализации определить, существовал ли дочерний узел в запоминающем устройстве до доступа (например, потому что запоминающее устройство недостижимо, или кэшируемая информация является устаревшей). При этих обстоятельствах реализации ни не требуются генерировать события изменения узла, ни мешаются делать так.
addNodeChangeListener
в class Preferences
ncl
- NodeChangeListener, чтобы добавить.Preferences.removeNodeChangeListener(NodeChangeListener)
, Preferences.addPreferenceChangeListener(PreferenceChangeListener)
public void removeNodeChangeListener(NodeChangeListener ncl)
Preferences
removeNodeChangeListener
в class Preferences
ncl
- NodeChangeListener, чтобы удалить.Preferences.addNodeChangeListener(NodeChangeListener)
protected abstract void putSpi(String key, String value)
Этот метод вызывается с блокировкой на этом сохраненном узле.
protected abstract String getSpi(String key)
Вообще говоря, этот метод не должен выдать исключение при любых обстоятельствах. Если, однако, если это действительно выдает исключение, исключение будет прервано и обработано как возвращаемое значение null.
Этот метод вызывается с блокировкой на этом сохраненном узле.
protected abstract void removeSpi(String key)
Этот метод вызывается с блокировкой на этом сохраненном узле.
protected abstract void removeNodeSpi() throws BackingStoreException
Preferences.removeNode()
метод неоднократно вызывает этот метод восходящим способом, удаляя каждого из потомков узла прежде, чем удалить узел непосредственно). Этот метод вызывается с блокировкой, держался этот узел и его родитель (и все предки, которые удаляются в результате единственного вызова к Preferences.removeNode()
).
Удаление узла не должно стать персистентным, пока метод flush не вызывается на этот узел (или предок).
Если этот узел бросит BackingStoreException, то исключение распространит вне включения removeNode()
вызов.
BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.protected abstract String[] keysSpi() throws BackingStoreException
Этот метод вызывается с блокировкой на этом сохраненном узле.
Если этот узел бросит BackingStoreException, то исключение распространит вне включения keys()
вызов.
BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.protected abstract String[] childrenNamesSpi() throws BackingStoreException
Этот метод вызывается с блокировкой на этом сохраненном узле.
Если этот узел бросит BackingStoreException, то исключение распространит вне включения childrenNames()
вызов.
BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.protected AbstractPreferences getChild(String nodeName) throws BackingStoreException
Preferences.MAX_NAME_LENGTH
символы. Кроме того, гарантируется, что этот узел не был удален. (Конструктор не должен проверить ни на одну из этих вещей, если он хочет переопределять этот метод.) Наконец, гарантируется, что именованный узел не был возвращен предыдущим вызовом этого метода или childSpi(java.lang.String)
после в прошлый раз, когда это было удалено. Другими словами кэшируемое значение будет всегда использоваться в предпочтении к вызову этого метода. (Конструктор не должен поддержать свой собственный кэш ранее возвращенных дочерних элементов, если он хочет переопределять этот метод.)
Эта реализация получает эту привилегированную блокировку узла, вызывает childrenNames()
получить массив имен дочерних элементов этого узла, и выполняет итерации по массиву, сравнивающему имя каждого дочернего элемента с указанным именем узла. Если у дочернего узла есть корректное имя, childSpi(String)
метод вызывается, и получающийся узел возвращается. Если итерация завершается, не находя указанное имя, null возвращается.
nodeName
- имя дочернего элемента, который будет разыскиваться.BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.protected abstract AbstractPreferences childSpi(String name)
Preferences.MAX_NAME_LENGTH
символы. Кроме того, гарантируется, что этот узел не был удален. (Конструктор не должен проверить ни на одну из этих вещей.) Наконец, гарантируется, что именованный узел не был возвращен предыдущим вызовом этого метода или getChild(String)
после в прошлый раз, когда это было удалено. Другими словами кэшируемое значение будет всегда использоваться в предпочтении к вызову этого метода. Подклассы не должны поддержать свой собственный кэш ранее возвращенных дочерних элементов.
Разработчик должен гарантировать, что возвращенный узел не был удален. Если бы подобно-именованный дочерний элемент этого узла был ранее удален, то разработчик должен возвратить недавно созданный узел AbstractPreferences; после того, как удаленный, узел AbstractPreferences не может быть "реанимирован".
Если этот метод заставит узел создаваться, то этот узел, как гарантируют, не будет персистентным, пока метод flush не будет вызван на этот узел или одного из его предков (или потомки).
Этот метод вызывается с блокировкой на этом сохраненном узле.
name
- Имя дочернего узла, чтобы возвратиться, относительно этого привилегированного узла.public String toString()
toString
в class Preferences
public void sync() throws BackingStoreException
Preferences.sync()
. Эта реализация вызывает рекурсивный метод помощника, который блокирует этот узел, вызывает syncSpi () на ней, разблокировал этот узел, и рекурсивно вызывает этот метод на каждый "кэшируемый дочерний элемент." Кэшируемый дочерний элемент является дочерним элементом этого узла, который был создан в этом VM и не впоследствии удален. В действительности этот метод делает глубину, первый обход "кэшируемого поддерева" базировался в этом узле, вызывая syncSpi () на каждом узле в поддереве, в то время как только, что узел блокируется. Отметьте, что syncSpi () вызывается сверху вниз.
sync
в class Preferences
BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.IllegalStateException
- если этот узел (или предок) был удален с removeNode()
метод.flush()
protected abstract void syncSpi() throws BackingStoreException
Если этот узел бросит BackingStoreException, то исключение распространит вне включения sync()
вызов.
BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.public void flush() throws BackingStoreException
Preferences.flush()
. Эта реализация вызывает рекурсивный метод помощника, который блокирует этот узел, вызывает flushSpi () на ней, разблокировал этот узел, и рекурсивно вызывает этот метод на каждый "кэшируемый дочерний элемент." Кэшируемый дочерний элемент является дочерним элементом этого узла, который был создан в этом VM и не впоследствии удален. В действительности этот метод делает глубину, первый обход "кэшируемого поддерева" базировался в этом узле, вызывая flushSpi () на каждом узле в поддереве, в то время как только, что узел блокируется. Отметьте, что flushSpi () вызывается сверху вниз.
Если этот метод вызывается на узел, который был удален с removeNode()
метод, flushSpi () вызывается на этот узел, но не на других.
flush
в class Preferences
BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.flush()
protected abstract void flushSpi() throws BackingStoreException
Если этот узел бросит BackingStoreException, то исключение распространит вне включения flush()
вызов.
BackingStoreException
- если эта работа не может быть завершена из-за отказа в запоминающем устройстве, или неспособности связаться с этим.protected boolean isRemoved()
removeNode()
метод. Этот метод блокирует этот узел до возврата содержания частного поля, используемого, чтобы отследить это состояние.removeNode()
метод.public void exportNode(OutputStream os) throws IOException, BackingStoreException
Preferences.exportNode(OutputStream)
.exportNode
в class Preferences
os
- поток вывода, о котором можно испустить XML-документ.IOException
- если запись в указанный поток вывода приводит к IOException.BackingStoreException
- если привилегированные данные не могут быть считаны из запоминающего устройства.Preferences.importPreferences(InputStream)
public void exportSubtree(OutputStream os) throws IOException, BackingStoreException
Preferences.exportSubtree(OutputStream)
.exportSubtree
в class Preferences
os
- поток вывода, о котором можно испустить XML-документ.IOException
- если запись в указанный поток вывода приводит к IOException.BackingStoreException
- если привилегированные данные не могут быть считаны из запоминающего устройства.Preferences.importPreferences(InputStream)
, Preferences.exportNode(OutputStream)
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92