Preferences 类的骨架实现,大大简化了实现它的任务。
This class is for Preferences implementers only. Normal users of the Preferences facility should have no need to consult this documentation. The Preferences documentation should suffice.
实施者必须覆盖九个抽象服务提供商接口 (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 ,要求实现在无法执行操作时抛出这个checked exception。异常向外传播,导致相应的 API 方法失败。
其余 SPI 方法 putSpi(String,String) 、removeSpi(String) 和 childSpi(String) 具有更复杂的异常行为。他们没有被指定抛出 BackingStoreException ,因为即使后备存储不可用,他们通常也可以遵守他们的合同。这是真的,因为它们不返回任何信息,并且在随后调用 Preferences.flush() 或 Preferences.sync() 之前,它们的效果不需要成为永久性的。一般来说,这些 SPI 方法不应该抛出异常。在某些实现中,可能存在这些调用甚至无法将请求的操作排队以供以后处理的情况。即使在这些情况下,通常最好忽略调用并返回,而不是抛出异常。然而,在这些情况下,随后调用 flush() 或 sync 并不意味着所有先前的操作都已成功永久化。
在一种情况下putSpi, removeSpi and childSpi应该抛出异常:如果调用者在底层操作系统上缺乏足够的权限来执行请求的操作。例如,如果非特权用户试图修改系统首选项,大多数系统都会发生这种情况。 (所需的权限因实现而异。在某些实现中,它们有权修改文件系统中某些目录的内容;在其他实现中,它们有权修改注册表中某些键的内容。)在任何情况下在这些情况下,通常不希望让程序继续执行,就好像这些操作将在以后成为永久性操作一样。虽然在这些情况下不需要实现抛出异常,但我们鼓励它们这样做。 SecurityException 是合适的。
大多数 SPI 方法需要实现在首选项节点读取或写入信息。实现者应该注意另一个 VM 可能同时从后备存储中删除该节点的事实。如果节点已被删除,则执行者有责任重新创建该节点。
实施说明:在 Sun 的默认 Preferences 实施中,用户的身份是从底层操作系统继承的,并且在虚拟机的生命周期内不会改变。认识到服务端 Preferences 实现可能会根据请求更改用户身份,通过使用静态 ThreadLocal 实例隐式传递给 Preferences 方法。此类实现的作者是强烈地鼓励在访问首选项时确定用户(例如通过 get(String,String) 或 put(String,String) 方法),而不是将用户与每个 Preferences 实例永久关联。后一种行为与正常的 Preferences 用法相冲突,并会导致极大的混乱。
- 自从:
- 1.4
- 参见:
-
字段摘要
字段修饰符和类型Field描述protected final Object其监视器用于锁定此节点的对象。protected boolean如果在创建此对象之前此节点不存在于后备存储中,则此字段应为true。在类 java.util.prefs.Preferences 中声明的字段
MAX_KEY_LENGTH, MAX_NAME_LENGTH, MAX_VALUE_LENGTH -
构造方法总结
构造方法修饰符构造方法描述protectedAbstractPreferences(AbstractPreferences parent, String name) 创建具有指定父节点和相对于其父节点的指定名称的首选项节点。 -
方法总结
修饰符和类型方法描述根据Preferences.absolutePath()中的规范实施absolutePath方法。void注册指定的监听接收节点变化事件对于这个节点。void注册指定的监听接收偏好改变事件对于这个偏好节点。protected final AbstractPreferences[]返回此节点的所有已知未删除的子节点。String[]根据Preferences.childrenNames()中的规范实施children方法。protected abstract String[]返回此首选项节点的子节点的名称。protected abstract AbstractPreferences返回此首选项节点的命名子节点,如果它尚不存在则创建它。voidclear()根据Preferences.clear()中的规范实施clear方法。void根据Preferences.exportNode(OutputStream)中的规范实施exportNode方法。void根据Preferences.exportSubtree(OutputStream)中的规范实施exportSubtree方法。voidflush()根据Preferences.flush()中的规范实施flush方法。protected abstract voidflushSpi()在锁定此节点的情况下调用此方法。根据Preferences.get(String,String)中的规范实施get方法。booleangetBoolean(String key, boolean def) 根据Preferences.getBoolean(String,boolean)中的规范实施getBoolean方法。byte[]getByteArray(String key, byte[] def) 根据Preferences.getByteArray(String,byte[])中的规范实施getByteArray方法。protected AbstractPreferences如果命名的孩子存在则返回,如果不存在则返回null。double根据Preferences.getDouble(String,double)中的规范实施getDouble方法。float根据Preferences.getFloat(String,float)中的规范实施getFloat方法。int根据Preferences.getInt(String,int)中的规范实施getInt方法。long根据Preferences.getLong(String,long)中的规范实施getLong方法。protected abstract String返回与该首选项节点上的指定键关联的值,如果没有关联该键,则返回null,或者此时无法确定关联。protected boolean返回true当且仅当此节点(或祖先)已使用removeNode()方法删除。boolean根据Preferences.isUserNode()中的规范实施isUserNode方法。String[]keys()根据Preferences.keys()中的规范实施keys方法。protected abstract String[]keysSpi()返回在此首选项节点中具有关联值的所有键。name()根据Preferences.name()中的规范实施name方法。根据Preferences.node(String)中的规范实施node方法。booleannodeExists(String path) 根据Preferences.nodeExists(String)中的规范实施nodeExists方法。parent()根据Preferences.parent()中的规范实施parent方法。void根据Preferences.put(String,String)中的规范实施put方法。voidputBoolean(String key, boolean value) 根据Preferences.putBoolean(String,boolean)中的规范实施putBoolean方法。voidputByteArray(String key, byte[] value) 根据Preferences.putByteArray(String,byte[])中的规范实施putByteArray方法。void根据Preferences.putDouble(String,double)中的规范实施putDouble方法。void根据Preferences.putFloat(String,float)中的规范实施putFloat方法。void根据Preferences.putInt(String,int)中的规范实施putInt方法。void根据Preferences.putLong(String,long)中的规范实施putLong方法。protected abstract void将给定的键值关联放入此偏好节点。void根据Preferences.remove(String)中的规范实施remove(String)方法。void根据Preferences.removeNode()中的规范实施removeNode()方法。void删除指定的NodeChangeListener,因此它不再接收更改事件。protected abstract void删除此首选项节点,使其及其包含的任何首选项失效。void删除指定的首选项更改监听,因此它不再接收首选项更改事件。protected abstract void删除此首选项节点上指定键的关联(如果有)。voidsync()根据Preferences.sync()中的规范实施sync方法。protected abstract voidsyncSpi()在锁定此节点的情况下调用此方法。toString()返回此首选项节点的绝对路径名。在类 java.util.prefs.Preferences 中声明的方法
importPreferences, systemNodeForPackage, systemRoot, userNodeForPackage, userRoot
-
字段详细信息
-
newNode
protected boolean newNode如果在创建此对象之前此节点不存在于后备存储中,则此字段应为true。该字段初始化为 false,但可以由子类构造函数设置为 true(此后不应修改)。该字段指示在创建完成时是否应触发节点更改事件。 -
lock
其监视器用于锁定此节点的对象。此对象优先于节点本身使用,以减少由于节点锁定而导致有意或无意拒绝服务的可能性。为了避免死锁,节点是绝不由持有该节点后代锁的线程锁定。
-
-
构造方法详细信息
-
AbstractPreferences
创建具有指定父节点和相对于其父节点的指定名称的首选项节点。- 参数:
parent- 此首选项节点的父节点,如果这是根节点则为 null。name- 此首选项节点的名称,相对于其父节点,或""(如果这是根节点)。- 抛出:
IllegalArgumentException- 如果name包含斜线 ('/'),或者parent是null而名称不是""。
-
-
方法详情
-
put
根据Preferences.put(String,String)中的规范实施put方法。此实现检查键和值是否合法,获取此首选项节点的锁,检查节点是否未被删除,调用
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
根据Preferences.get(String,String)中的规范实施get方法。此实现首先检查
key是否为null如果是,则抛出NullPointerException。然后它获得此首选项节点的锁,检查该节点是否未被删除,调用getSpi(String)并返回结果,除非getSpi调用返回null或抛出异常,在这种情况下此调用返回def。- 指定者:
get在类Preferences中- 参数:
key- 要返回其关联值的键。def- 如果此首选项节点没有与key关联的值,则返回该值。- 返回:
-
与
key关联的值,如果没有值与key关联,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果键是null。 (一个null默认是允许。)IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。
-
remove
根据Preferences.remove(String)中的规范实施remove(String)方法。此实现获取此首选项节点的锁,检查该节点是否未被删除,调用
removeSpi(String),如果有任何首选项更改监听器,则将通知事件加入队列以供事件调度线程处理。- 指定者:
remove在类Preferences中- 参数:
key- 要从首选项节点中删除其映射的键。- 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。NullPointerException- 如果key是null。
-
clear
根据Preferences.clear()中的规范实施clear方法。此实现获取此首选项节点的锁,调用
keys()以获取键数组,并在每个键上调用remove(String)遍历数组。- 指定者:
clear在类Preferences中- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
putInt
根据Preferences.putInt(String,int)中的规范实施putInt方法。此实现将
value转换为带有Integer.toString(int)的字符串,并在结果上调用put(String,String)。- 指定者:
putInt在类Preferences中- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果键是null。IllegalArgumentException- 如果key.length()超过MAX_KEY_LENGTH。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
getInt
根据Preferences.getInt(String,int)中的规范实施getInt方法。此实现调用
get(key, null)。如果返回值非空,则实现会尝试将其转换为带有Integer.parseInt(String)的int。如果尝试成功,则此方法返回返回值。否则,返回def。- 指定者:
getInt在类Preferences中- 参数:
key- 其关联值将作为 int 返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为 int,则返回该值。- 返回:
-
此首选项节点中与
key关联的字符串表示的 int 值,如果关联值不存在或无法解释为 int,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
putLong
根据Preferences.putLong(String,long)中的规范实施putLong方法。此实现将
value转换为带有Long.toString(long)的字符串,并在结果上调用put(String,String)。- 指定者:
putLong在类Preferences中- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果键是null。IllegalArgumentException- 如果key.length()超过MAX_KEY_LENGTH。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
getLong
根据Preferences.getLong(String,long)中的规范实施getLong方法。此实现调用
get(key, null)。如果返回值非空,则实现会尝试将其转换为带有Long.parseLong(String)的long。如果尝试成功,则此方法返回返回值。否则,返回def。- 指定者:
getLong在类Preferences中- 参数:
key- 其关联值将作为 long 返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为 long,则返回该值。- 返回:
-
此首选项节点中与
key关联的字符串表示的 long 值,如果关联值不存在或不能解释为 long,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
putBoolean
根据Preferences.putBoolean(String,boolean)中的规范实施putBoolean方法。此实现将
value转换为带有String.valueOf(boolean)的字符串,并在结果上调用put(String,String)。- 指定者:
putBoolean在类Preferences中- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果键是null。IllegalArgumentException- 如果key.length()超过MAX_KEY_LENGTH。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
getBoolean
根据Preferences.getBoolean(String,boolean)中的规范实施getBoolean方法。此实现调用
get(key, null)。如果返回值非空,则使用String.equalsIgnoreCase(String)将其与"true"进行比较。如果比较返回true,则此调用返回true。否则,将原始返回值与"false"进行比较,再次使用String.equalsIgnoreCase(String)。如果比较返回true,则此调用返回false。否则,此调用返回def。- 指定者:
getBoolean在类Preferences中- 参数:
key- 其关联值将作为boolean返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为boolean,则返回该值。- 返回:
-
此首选项节点中与
key关联的字符串表示的boolean,如果关联值不存在或无法解释为boolean,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
putFloat
根据Preferences.putFloat(String,float)中的规范实施putFloat方法。此实现将
value转换为带有Float.toString(float)的字符串,并在结果上调用put(String,String)。- 指定者:
putFloat在类Preferences中- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果键是null。IllegalArgumentException- 如果key.length()超过MAX_KEY_LENGTH。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
getFloat
根据Preferences.getFloat(String,float)中的规范实施getFloat方法。此实现调用
get(key, null)。如果返回值非空,则实现会尝试将其转换为带有Float.parseFloat(String)的float。如果尝试成功,则此方法返回返回值。否则,返回def。- 指定者:
getFloat在类Preferences中- 参数:
key- 其关联值将作为浮点数返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为浮点数,则返回该值。- 返回:
-
此首选项节点中与
key关联的字符串表示的浮点值,如果关联值不存在或无法解释为浮点数,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
putDouble
根据Preferences.putDouble(String,double)中的规范实施putDouble方法。此实现将
value转换为带有Double.toString(double)的字符串,并在结果上调用put(String,String)。- 指定者:
putDouble在类Preferences中- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果键是null。IllegalArgumentException- 如果key.length()超过MAX_KEY_LENGTH。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
getDouble
根据Preferences.getDouble(String,double)中的规范实施getDouble方法。此实现调用
get(key, null)。如果返回值非空,则实现会尝试将其转换为带有Double.parseDouble(String)的double。如果尝试成功,则此方法返回返回值。否则,返回def。- 指定者:
getDouble在类Preferences中- 参数:
key- 其关联值将作为双精度值返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为双精度值,则返回该值。- 返回:
-
此首选项节点中与
key关联的字符串表示的双精度值,如果关联值不存在或不能解释为双精度值,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
putByteArray
根据Preferences.putByteArray(String,byte[])中的规范实施putByteArray方法。- 指定者:
putByteArray在类Preferences中- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果键或值是null。IllegalArgumentException- 如果 key.length() 超过 MAX_KEY_LENGTH 或者如果 value.length 超过 MAX_VALUE_LENGTH*3/4。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
getByteArray
根据Preferences.getByteArray(String,byte[])中的规范实施getByteArray方法。- 指定者:
getByteArray在类Preferences中- 参数:
key- 其关联值将作为字节数组返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为字节数组,则返回该值。- 返回:
-
由与此首选项节点中的
key关联的字符串表示的字节数组值,如果关联值不存在或无法解释为字节数组,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。 (def的null值是允许。)IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
keys
- 指定者:
keys在类Preferences中- 返回:
- 在此首选项节点中具有关联值的键数组。
- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。
-
childrenNames
根据Preferences.childrenNames()中的规范实施children方法。此实现获取此首选项节点的锁,检查该节点是否未被删除,构造一个
TreeSet初始化为已缓存的子节点的名称(该节点的“子缓存”中的子节点),调用childrenNamesSpi(),并添加所有返回的孩子的名字进入集合。使用toArray方法将树集的元素转储到String数组中,并返回该数组。- 指定者:
childrenNames在类Preferences中- 返回:
- 此首选项节点的子节点的名称。
- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
cachedChildren
返回此节点的所有已知未删除的子节点。- 返回:
- 该节点的所有已知未删除的子节点。
-
parent
- 指定者:
parent在类Preferences中- 返回:
- 此首选项节点的父节点。
- 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。
-
node
根据Preferences.node(String)中的规范实施node方法。此实现获取此首选项节点的锁并检查该节点是否未被删除。如果
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()方法移除。- 参见:
-
nodeExists
根据Preferences.nodeExists(String)中的规范实施nodeExists方法。此实现与
node(String)非常相似,除了使用getChild(String)而不是childSpi(String)。- 指定者:
nodeExists在类Preferences中- 参数:
path- 要检查其存在的节点的路径名。- 返回:
- 如果指定的节点存在,则为真。
- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。IllegalArgumentException- 如果路径名无效(即它包含多个连续的斜杠字符,或以斜杠字符结尾且长度超过一个字符)。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除且pathname不是空字符串 ("")。
-
removeNode
根据Preferences.removeNode()中的规范实施removeNode()方法。此实现检查此节点是否为根节点;如果是这样,它会抛出一个适当的异常。然后,它锁定该节点的父节点,并调用遍历以该节点为根的子树的递归辅助方法。递归方法锁定调用它的节点,检查它是否已经被删除,然后确保它的所有子节点都被缓存:调用
childrenNamesSpi()方法并检查每个返回的子名称是否包含在子节点中缓存。如果一个孩子还没有被缓存,childSpi(String)方法被调用来为它创建一个Preferences实例,这个实例被放入孩子缓存中。然后辅助方法在其子缓存中包含的每个节点上递归调用自身。接下来,它调用removeNodeSpi(),将自己标记为已删除,并将自己从其父级的子缓存中删除。最后,如果有任何节点更改监听器,它会将通知事件排入队列以供事件分派线程处理。注意 helper 方法总是在所有祖先被调用时被锁定,直到“最近的未移除的祖先”被锁定。
- 指定者:
removeNode在类Preferences中- 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。UnsupportedOperationException- 如果在根节点上调用此方法。BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。- 参见:
-
name
- 指定者:
name在类Preferences中- 返回:
- 此首选项节点的名称,相对于其父节点。
-
absolutePath
根据Preferences.absolutePath()中的规范实施absolutePath方法。此实现仅返回在构造此节点时计算的绝对路径名(基于传递给此节点的构造方法的名称,以及传递给此节点的祖先构造方法的名称)。
- 指定者:
absolutePath在类Preferences中- 返回:
- 此首选项节点的绝对路径名。
-
isUserNode
public boolean isUserNode()根据Preferences.isUserNode()中的规范实施isUserNode方法。此实现将此节点的根节点(存储在私有字段中)与
Preferences.userRoot()返回的值进行比较。如果两个对象引用相同,则此方法返回 true。- 指定者:
isUserNode在类Preferences中- 返回:
true如果此首选项节点在用户首选项树中,false如果它在系统首选项树中。
-
addPreferenceChangeListener
从类复制的描述:Preferences注册指定的监听接收偏好改变事件对于这个偏好节点。当偏好被添加到该节点、从该节点移除,或者当与偏好关联的值被更改时,会生成偏好更改事件。 (偏好变化事件是not由Preferences.removeNode()方法生成,它生成一个节点变化事件.偏好更改事件是由clear方法生成。)只有在与注册的监听相同的 JVM 内所做的更改才能保证事件,尽管某些实现可能会为在该 JVM 之外所做的更改生成事件。事件可能会在更改持久化之前生成。在此节点的后代中修改首选项时不会生成事件;想要此类事件的调用者必须向每个后代注册。
- 指定者:
addPreferenceChangeListener在类Preferences中- 参数:
pcl- 要添加的首选项更改监听器。- 参见:
-
removePreferenceChangeListener
从类复制的描述:Preferences删除指定的首选项更改监听,因此它不再接收首选项更改事件。- 指定者:
removePreferenceChangeListener在类Preferences中- 参数:
pcl- 要删除的首选项更改监听器。- 参见:
-
addNodeChangeListener
从类复制的描述:Preferences注册指定的监听接收节点变化事件对于这个节点。当向该节点添加或删除子节点时,会生成节点更改事件。 (单个Preferences.removeNode()调用会导致多个节点变化事件,一个代表以删除的节点为根的子树中的每个节点。)只有在与注册的监听相同的 JVM 内所做的更改才能保证事件,尽管某些实现可能会为在该 JVM 之外所做的更改生成事件。在更改成为永久性更改之前可能会生成事件。添加或删除此节点的间接后代时不会生成事件;想要此类事件的调用者必须向每个后代注册。
关于节点创建几乎没有保证。因为节点是在访问时隐式创建的,所以实现在访问之前确定子节点是否存在于后备存储中可能是不可行的(例如,因为后备存储不可访问或缓存信息已过时)。在这些情况下,既不需要实现也不禁止生成节点更改事件。
- 指定者:
addNodeChangeListener在类Preferences中- 参数:
ncl- 要添加的NodeChangeListener。- 参见:
-
removeNodeChangeListener
从类复制的描述:Preferences删除指定的NodeChangeListener,因此它不再接收更改事件。- 指定者:
removeNodeChangeListener在类Preferences中- 参数:
ncl- 要删除的NodeChangeListener。- 参见:
-
putSpi
将给定的键值关联放入此偏好节点。保证key和value非空且具有合法长度。此外,还保证该节点未被删除。 (实施者不需要检查任何这些东西。)在持有此节点上的锁的情况下调用此方法。
- 参数:
key- 钥匙value- 值
-
getSpi
返回与该首选项节点上的指定键关联的值,如果没有关联该键,则返回null,或者此时无法确定关联。保证key是非空的。此外,还保证该节点未被删除。 (实施者不需要检查这些事情中的任何一个。)一般来说,这个方法在任何情况下都不应该抛出异常。但是,如果它确实抛出异常,则该异常将被拦截并视为
null返回值。在持有此节点上的锁的情况下调用此方法。
- 参数:
key- 钥匙- 返回:
-
与此首选项节点上的指定键相关联的值,或
null如果此键没有关联,或者此时无法确定关联。
-
removeSpi
删除此首选项节点上指定键的关联(如果有)。保证key是非空的。此外,还保证该节点未被删除。 (实施者不需要检查这些事情中的任何一个。)在持有此节点上的锁的情况下调用此方法。
- 参数:
key- 钥匙
-
removeNodeSpi
删除此首选项节点,使其及其包含的任何首选项失效。在进行此调用时,命名的孩子将没有后代(即,Preferences.removeNode()方法以自下而上的方式重复调用此方法,在删除节点本身之前删除节点的每个后代)。使用此节点及其父级(以及由于对
Preferences.removeNode()的单次调用而被删除的所有祖先)持有的锁来调用此方法。在
flush方法在此节点(或祖先)上调用之前,节点的删除不需要成为持久的。如果此节点抛出
BackingStoreException,则异常将传播到封闭的removeNode()调用之外。- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。
-
keysSpi
返回在此首选项节点中具有关联值的所有键。 (如果此节点没有偏好,则返回的数组大小为零。)保证此节点未被删除。在持有此节点上的锁的情况下调用此方法。
如果此节点抛出
BackingStoreException,异常将传播到封闭的keys()调用之外。- 返回:
- 在此首选项节点中具有关联值的键数组。
- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。
-
childrenNamesSpi
返回此首选项节点的子节点的名称。 (如果此节点没有子节点,则返回的数组大小为零。)此方法不需要返回任何已缓存的节点的名称,但这样做可能不会造成任何损害。在持有此节点上的锁的情况下调用此方法。
如果此节点抛出
BackingStoreException,则异常将传播到封闭的childrenNames()调用之外。- 返回:
- 包含此首选项节点的子节点名称的数组。
- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。
-
getChild
如果命名的孩子存在则返回,如果不存在则返回null。保证nodeName非空,非空,不包含斜杠字符('/'),并且不超过Preferences.MAX_NAME_LENGTH个字符。此外,还保证该节点未被删除。 (如果实现者选择覆盖此方法,则无需检查这些内容中的任何一项。)最后,保证命名节点在上次被删除后没有被此方法的先前调用返回或
childSpi(java.lang.String)。换句话说,将始终优先使用缓存值而不是调用此方法。 (如果实现者选择覆盖此方法,则无需维护他自己的先前返回的子级的缓存。)此实现获取此首选项节点的锁,调用
childrenNames()以获取此节点的子节点的名称数组,并迭代该数组,将每个子节点的名称与指定的节点名称进行比较。如果子节点具有正确的名称,则调用childSpi(String)方法并返回结果节点。如果迭代完成但未找到指定名称,则返回null。- 参数:
nodeName- 要搜索的孩子的姓名。- 返回:
- 命名的子级(如果存在)或 null(如果不存在)。
- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。
-
childSpi
返回此首选项节点的命名子节点,如果它尚不存在则创建它。保证name非空,非空,不包含斜杠字符('/'),并且不超过Preferences.MAX_NAME_LENGTH个字符。此外,还保证该节点未被删除。 (实施者不需要检查任何这些东西。)最后,保证命名节点在上次删除后没有被该方法的先前调用返回或
getChild(String)。换句话说,将始终优先使用缓存值而不是调用此方法。子类不需要维护自己的先前返回的孩子的缓存。实施者必须确保返回的节点没有被删除。如果先前删除了该节点的同名子节点,则实现者必须返回一个新构造的
AbstractPreferences节点;一旦移除,AbstractPreferences节点就无法“复苏”。如果此方法导致创建一个节点,则在对该节点或其祖先(或后代)之一调用
flush方法之前,不能保证该节点是持久的。在持有此节点上的锁的情况下调用此方法。
- 参数:
name- 要返回的子节点的名称,相对于此首选项节点。- 返回:
- 命名的子节点。
-
toString
返回此首选项节点的绝对路径名。- 指定者:
toString在类Preferences中- 返回:
- 对象的字符串表示形式。
-
sync
根据Preferences.sync()中的规范实施sync方法。这个实现调用一个递归的辅助方法来锁定这个节点,在它上面调用 syncSpi(),解锁这个节点,然后在每个“缓存的子节点”上递归地调用这个方法。缓存的子节点是已在此 VM 中创建且随后未被删除的此节点的子节点。实际上,此方法对以该节点为根的“缓存子树”进行深度优先遍历,在子树中的每个节点上调用 syncSpi(),而只有该节点被锁定。请注意,syncSpi() 是自上而下调用的。
- 指定者:
sync在类Preferences中- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
syncSpi
在锁定此节点的情况下调用此方法。此方法的契约是将存储在此节点的任何缓存首选项与存储在后备存储中的任何首选项同步。 (这个节点很可能不存在于后备存储中,要么是因为它已经被另一个VM删除,要么是因为它还没有被创建。)注意这个方法应该not同步此节点的任何子节点中的首选项。如果后备存储自然地一次同步整个子树,则鼓励实现者重写 sync(),而不是仅仅重写此方法。如果此节点抛出
BackingStoreException,则异常将传播到封闭的sync()调用之外。- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。
-
flush
根据Preferences.flush()中的规范实施flush方法。这个实现调用一个递归的辅助方法来锁定这个节点,在它上面调用 flushSpi(),解锁这个节点,并在每个“缓存的子级”上递归地调用这个方法。缓存的子节点是已在此 VM 中创建且随后未被删除的此节点的子节点。实际上,此方法对以该节点为根的“缓存子树”进行深度优先遍历,在子树中的每个节点上调用 flushSpi(),而只有该节点被锁定。请注意,flushSpi() 是自上而下调用的。
如果在已使用
removeNode()方法移除的节点上调用此方法,则会在该节点上调用 flushSpi(),但不会在其他节点上调用。- 指定者:
flush在类Preferences中- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。- 参见:
-
flushSpi
在锁定此节点的情况下调用此方法。此方法的契约是将此首选项节点内容中的任何缓存更改强制到后备存储,以保证它们的持久性。 (这个节点很可能不存在于后备存储中,要么是因为它已经被另一个VM删除,要么是因为它还没有被创建。)注意这个方法应该not刷新此节点的任何子节点中的首选项。如果后备存储自然地一次刷新整个子树,则鼓励实现者重写 flush(),而不是仅仅重写此方法。如果此节点抛出
BackingStoreException,则异常将传播到封闭的flush()调用之外。- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。
-
isRemoved
protected boolean isRemoved()返回true当且仅当此节点(或祖先)已使用removeNode()方法删除。此方法在返回用于跟踪此状态的私有字段的内容之前锁定此节点。- 返回:
true当且仅当此节点(或祖先)已使用removeNode()方法删除。
-
exportNode
根据Preferences.exportNode(OutputStream)中的规范实施exportNode方法。- 指定者:
exportNode在类Preferences中- 参数:
os- 在其上发出 XML 文档的输出流。- 抛出:
IOException- 如果写入指定的输出流导致IOException。BackingStoreException- 如果无法从后备存储中读取偏好数据。- 参见:
-
exportSubtree
根据Preferences.exportSubtree(OutputStream)中的规范实施exportSubtree方法。- 指定者:
exportSubtree在类Preferences中- 参数:
os- 在其上发出 XML 文档的输出流。- 抛出:
IOException- 如果写入指定的输出流导致IOException。BackingStoreException- 如果无法从后备存储中读取偏好数据。- 参见:
-