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
,及实施要求无法执行操作抛出这个异常。异常向外传播,导致相应的“失败”方法失败。
剩下的SPI方法putSpi(String,String)
,removeSpi(String)
和childSpi(String)
具有更复杂的异常行为。他们都没有指定,把BackingStoreException,他们一般都能遵守合同即使后备存储不可用。这是真的因为他们不会返回任何信息,其效果并不需要等到随后调用Preferences.flush()
或Preferences.sync()
成为永久。一般来说,这些SPI方法不应该抛出异常。在一些实现中,有可能的情况下,这些电话甚至不能入队请求的操作后处理。即使在这种情况下,也可以简单地忽略调用和返回,而不是抛出一个异常。在这种情况下,然而,对flush()和sync所有后续调用返回false,返回true意味着以前所有的操作已成功地成为永久性的。
有一种情况下,putSpi, removeSpi and childSpi应该抛出一个例外:如果对方没有足够的权限对底层操作系统执行所请求的操作。例如,这将发生在大多数系统上,如果一个非特权的用户试图修改系统的偏好。(所需的权限将从实现到实现有所不同。在某些实现中,它们是修改文件系统中某个目录的内容的权利;其他的则是在任何情况下修改注册表中某个键的内容的权利。)在任何一种情况下,让程序继续执行,就好像这些操作在以后会变成永久性的一样。虽然在这种情况下,实现不需要抛出一个异常,但他们被鼓励这样做。一个SecurityException
是合适的。
大部分的SPI方法需要执行读或写在一个偏好节点信息。实现者应该注意的事实,另一个虚拟机可以同时删除该节点从存储支持。它是实施的责任重新创建节点,如果它已被删除。
注:在实施Preferences太阳的默认实现,用户的身份从底层的操作系统继承并不会改变虚拟机的寿命。这是公认的,服务器端Preferences实现可能有用户身份变更请求,含蓄地传递Preferences方法通过静态ThreadLocal
使用实例。这样的实现作者强烈地鼓励确定访问的时间偏好的用户(例如由get(String,String)
或put(String,String)
法)而不是永久关联的用户每个Preferences实例。后者的行为冲突与正常Preferences使用会导致很大的混乱。
Preferences
Modifier and Type | Field and Description |
---|---|
protected Object |
lock
一个对象,其监视器用于锁定此节点。
|
protected boolean |
newNode
这场应该
true如果这个节点没有对该对象的创建之前备份存储的存在。
|
MAX_KEY_LENGTH, MAX_NAME_LENGTH, MAX_VALUE_LENGTH
Modifier | Constructor and Description |
---|---|
protected |
AbstractPreferences(AbstractPreferences parent, String name)
使用指定的父节点和指定的名称与指定的父节点创建一个首选节点。
|
Modifier and Type | Method and Description |
---|---|
String |
absolutePath()
实现了
absolutePath方法按规范
Preferences.absolutePath() 。
|
void |
addNodeChangeListener(NodeChangeListener ncl)
寄存器指定监听器接收节点变化事件此节点。
|
void |
addPreferenceChangeListener(PreferenceChangeListener pcl)
寄存器指定监听器接收偏好变化事件这种偏好结。
|
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() 。
|
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()
此方法被调用此节点锁定。
|
String |
toString()
返回此首选项节点的绝对路径名称。
|
importPreferences, systemNodeForPackage, systemRoot, userNodeForPackage, userRoot
protected boolean newNode
protected final Object lock
protected AbstractPreferences(AbstractPreferences parent, String name)
parent
-这种偏好节点的父节点,或null,如果这根。
name
-这种偏好节点的名称,相对于它的父,或
""如果这根。
IllegalArgumentException
-如果
name包含斜杠(
'/'),或
parent是
null和名字不是
""。
public void put(String key, String value)
Preferences.put(String,String)
。
实施检查,键和值都是合法的,得到这个优惠节点的锁,检查该节点没有被删除,调用putSpi(String,String)
,如果有任何的偏好变化的听众,入队的通知事件处理的事件调度线程。
put
方法重写,继承类
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
方法重写,继承类
Preferences
key
密钥的相关值被返回。
def
-是在事件,这种偏好节点没有与
key值返回的值。
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
法去除。
NullPointerException
如果关键是
null。(一
null默认是允许的。)
public void remove(String key)
这个实现得到这种偏好节点的锁,检查该节点没有被删除,调用removeSpi(String)
如果有任何偏好改变监听器,入队的通知事件处理的事件调度线程。
Preferences.remove(String)
。
remove
方法重写,继承类
Preferences
key
键的映射是从偏好节点删除。
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
法去除。
NullPointerException
-如果
key是
null ..
public void clear() throws BackingStoreException
Preferences.clear()
。
这个实现得到这种偏好节点的锁,调用keys()
获得键数组、遍历数组调用remove(String)
每个关键。
clear
方法重写,继承类
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
方法重写,继承类
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
方法重写,继承类
Preferences
key
键的值是int返回
def
-是在事件,这种偏好节点没有与
key或相关的价值不相关的值被解释为int返回值
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
法去除。
NullPointerException
。
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
方法重写,继承类
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
方法重写,继承类
Preferences
key
键的值作为长回来。
def
-是在事件,这种偏好节点没有与
key或相关的价值不相关的值被解释为一个长的返回值。
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
法去除。
NullPointerException
。
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
方法重写,继承类
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)
这get(key, null)
实现调用。如果返回值为非零,它与"true"使用String.equalsIgnoreCase(String)
相比。如果比较的结果true,这个调用返回true。否则,原来的返回值与"false",再次使用String.equalsIgnoreCase(String)
。如果比较的结果true,这个调用返回false。否则,该调用返回def。
Preferences.getBoolean(String,boolean)
。
getBoolean
方法重写,继承类
Preferences
key
键的值是一个布尔返回。
def
-是在事件,这种偏好节点没有与
key或相关的价值不相关的值被解释为一个布尔函数的返回值。
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
法去除。
NullPointerException
。
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
方法重写,继承类
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
方法重写,继承类
Preferences
key
键的值作为浮返回。
def
-是在事件,这种偏好节点没有与
key或相关的价值不相关的值被解释为一个浮动的返回值。
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
法去除。
NullPointerException
。
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
方法重写,继承类
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
方法重写,继承类
Preferences
key
键的值是作为一个双回来。
def
-是在事件,这种偏好节点没有与
key或相关的价值不相关的值被解释为一个双重的返回值。
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
法去除。
NullPointerException
。
Preferences.putDouble(String,double)
,
Preferences.get(String,String)
public void putByteArray(String key, byte[] value)
Preferences.putByteArray(String,byte[])
。
putByteArray
方法重写,继承类
Preferences
key
键的值的字符串形式是相关的。
value
值的字符串形式是与关键。
NullPointerException
如果键或值
null。
IllegalArgumentException
如果关键。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
方法重写,继承类
Preferences
key
键的值是作为一个字节数组返回。
def
-是在事件,这种偏好节点没有与
key或相关的价值不相关的值被解释为一个字节数组中返回的值。
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
法去除。
NullPointerException
。(为
def一
null价值是允许的。)
Preferences.get(String,String)
,
Preferences.putByteArray(String,byte[])
public String[] keys() throws BackingStoreException
这个实现得到这种偏好节点的锁,检查该节点没有被调用keysSpi()
。
Preferences.keys()
。
keys
方法重写,继承类
Preferences
BackingStoreException
-如果此操作不能由于在存储备份失败的完成,或无法与它沟通。
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
法去除。
public String[] childrenNames() throws BackingStoreException
这个实现得到这种偏好节点的锁,检查该节点没有被拆除,构建了一个TreeSet初始化为孩子已缓存的名字(孩子们在这个节点的孩子”缓存”),调用childrenNamesSpi()
,并添加所有返回的孩子名字进入设置。树的集合中的元素是倒入用toArray方法String阵列,该阵列返回。
Preferences.childrenNames()
。
childrenNames
方法重写,继承类
Preferences
BackingStoreException
-如果此操作不能由于在存储备份失败的完成,或无法与它沟通。
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
法去除。
cachedChildren()
protected final AbstractPreferences[] cachedChildren()
public Preferences parent()
此实现获得此偏好节点的锁,检查该节点没有被删除,并返回传递给该节点的构造函数的父值。
Preferences.parent()
。
parent
方法重写,继承类
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
方法重写,继承类
Preferences
path
-偏好节点的路径名称返回。
IllegalArgumentException
如果路径名无效(即,它包含多个斜杠字符,或者用斜杠字符结束,不仅仅是一个字符)。
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
法去除。
Preferences.flush()
public boolean nodeExists(String path) throws BackingStoreException
这个实现是node(String)
非常相似,除了getChild(String)
代替childSpi(String)
。
Preferences.nodeExists(String)
。
nodeExists
方法重写,继承类
Preferences
path
-节点的存在是要检查路径名。
BackingStoreException
-如果此操作不能由于在存储备份失败的完成,或无法与它沟通。
IllegalArgumentException
如果路径名无效(即,它包含多个斜杠字符,或者用斜杠字符结束,不仅仅是一个字符)。
IllegalStateException
-如果此节点(或祖先)已与
removeNode()
方法和
pathname删除不是空字符串(
"")。
public void removeNode() throws BackingStoreException
Preferences.removeNode()
。
此实现检查查看此节点是根;如果是,则抛出一个适当的异常。然后,它锁定该节点的父节点,并调用一个递归辅助方法遍历子树扎根在这个节点。递归方法锁定的节点被称为,检查它已经不能被删除,并确保所有的孩子:childrenNamesSpi()
缓存的方法调用和返回的每一个孩子的名字是检查孩子的缓存控制。如果一个孩子是不是已经缓存的childSpi(String)
方法被调用来为它创建一个Preferences实例,并放进孩子的缓存实例。然后,辅助方法在子缓存中包含的每个节点上递归调用自己的子节点。接下来,它调用removeNodeSpi()
,标志本身删除,并删除本身从它的父的孩子缓存。最后,如果有任何节点改变监听器,它入队处理通知事件的事件调度线程。
请注意,帮助器方法总是与所有的祖先一起调用“最接近的非被删除的祖先”锁定的。
removeNode
方法重写,继承类
Preferences
IllegalStateException
-如果此节点(或祖先)已经与
removeNode()
法去除。
UnsupportedOperationException
-如果这方法在根节点调用。
BackingStoreException
-如果此操作不能由于在存储备份失败的完成,或无法与它沟通。
Preferences.flush()
public String name()
Preferences.name()
。
此实现只返回传递给此节点的构造函数的名称。
name
方法重写,继承类
Preferences
public String absolutePath()
Preferences.absolutePath()
。
此实现只返回此节点构建的时间计算的绝对路径名(基于传递给此节点的构造函数的名称,以及传递给此节点的祖先构造函数的名称)。
absolutePath
方法重写,继承类
Preferences
public boolean isUserNode()
Preferences.isUserNode()
。
这个实现比较这个节点的根节点(这是存储在一个私人领域)的返回值Preferences.userRoot()
。如果两个对象引用是相同的,则该方法返回真。
isUserNode
方法重写,继承类
Preferences
public void addPreferenceChangeListener(PreferenceChangeListener pcl)
Preferences
Preferences.removeNode()
方法,产生一个节点变化事件生成。偏好改变的事件是
clear方法产生
事件是只保证在相同的JVM为注册侦听器的变化,尽管一些实现可能产生了在JVM变化事件。事件可能在更改之前生成已被持久化。当此节点的子类中的偏好被修改时,事件不会产生;希望这样的事件的调用方必须在每个子代中注册。
。)addPreferenceChangeListener
方法重写,继承类
Preferences
pcl
的偏好改变监听器添加。
Preferences.removePreferenceChangeListener(PreferenceChangeListener)
,
Preferences.addNodeChangeListener(NodeChangeListener)
public void removePreferenceChangeListener(PreferenceChangeListener pcl)
Preferences
removePreferenceChangeListener
方法重写,继承类
Preferences
pcl
的偏好改变监听器移除。
Preferences.addPreferenceChangeListener(PreferenceChangeListener)
public void addNodeChangeListener(NodeChangeListener ncl)
Preferences
Preferences.removeNode()
调用结果多节点变化事件,一为根的子树中被删除的节点,每个节点
事件是只保证在相同的JVM为注册侦听器的变化,尽管一些实现可能产生了在JVM变化事件。在更改已成为永久性之前,可能会产生事件。当此节点的间接后裔被添加或删除时,不产生事件;希望这样的事件的调用方必须在每个子代中注册。
关于节点创建可以提供一些保证。因为节点隐式地创建访问时,它可能无法实现确定之前访问后台存储存在子节点是可行的(例如,由于支持存储访问或缓存信息过时)。在这种情况下,实现都不需要生成节点更改事件,也不禁止这样做。
)addNodeChangeListener
方法重写,继承类
Preferences
ncl
-
NodeChangeListener添加。
Preferences.removeNodeChangeListener(NodeChangeListener)
,
Preferences.addPreferenceChangeListener(PreferenceChangeListener)
public void removeNodeChangeListener(NodeChangeListener ncl)
Preferences
removeNodeChangeListener
方法重写,继承类
Preferences
ncl
-
NodeChangeListener删除。
Preferences.addNodeChangeListener(NodeChangeListener)
protected abstract void putSpi(String key, String value)
此方法在这个节点上的锁被调用。
key
的关键
value
-价值
protected abstract String getSpi(String key)
一般来说,这种方法在任何情况下都不应该抛出一个异常。如果,但是,如果它不抛出异常,该异常将被视为一个null返回值。
此方法在这个节点上的锁被调用。
key
的关键
protected abstract void removeSpi(String key)
此方法在这个节点上的锁被调用。
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
方法重写,继承类
Preferences
public void sync() throws BackingStoreException
Preferences.sync()
。
这要求执行递归的辅助方法,锁定此节点,调用syncspi()它,打开这个结,并递归地调用该方法,每个缓存缓存的孩子。”孩子是该节点已经在VM创建并不是随后删除的孩子。实际上,这种方法是深度优先遍历的“缓存子树”扎根在这个节点,每个节点上调用syncspi()子树中的节点上,而只有。注意,调用syncspi()自上而下。
sync
方法重写,继承类
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
方法重写,继承类
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
方法重写,继承类
Preferences
os
-在输出流发出的XML文档。
IOException
如果写入到指定的输出流中
IOException。
BackingStoreException
如果偏好数据不能从后备存储读取。
Preferences.importPreferences(InputStream)
public void exportSubtree(OutputStream os) throws IOException, BackingStoreException
Preferences.exportSubtree(OutputStream)
。
exportSubtree
方法重写,继承类
Preferences
os
-在输出流发出的XML文档。
IOException
如果写入到指定的输出流中
IOException。
BackingStoreException
如果偏好数据不能从后备存储读取。
Preferences.importPreferences(InputStream)
,
Preferences.exportNode(OutputStream)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.