根据 preferences.node(string)
中的规范实现 node 方法。
此实现获取首选项节点的锁并检查该节点是否未被移除。如果 path 为 "",则返回此节点;如果 path 为 "/",则返回此节点的根。如果 path 中的第一个字符不是 '/',则此实现将 path 分解为标记,并从此节点到指定节点递归式遍历此路径,在遍历的每一个步骤都要“使用”path 中的名称和斜杠。在每一个步骤,都要锁定当前节点并为指定节点检查该节点的子缓存。如果未找到,则该名称已经过检查,以确保其长度不超过 max_name_length。然后,调用 childspi(string)
方法并将结果存储在此节点的子缓存中。如果新创建的 preferences 对象的 newnode
字段为 true,并且存在任一节点更改侦听器,则将由事件指派线程所处理的通知事件加入队列。
没有其他的标记时,此方法将返回在子缓存中找到的最后一个值或 childspi 返回的值。如果在遍历过程中,连续出现两个 "/" 标记或者最后一个标记是 "/"(而不是名称),则抛出适当的 illegalargumentexception。
如果 path 的第一个字符是 '/'(指示绝对路径名),则在将 path 分解为标记前,删除此首选项节点的锁,此方法从根(不是从此节点)开始递归式遍历此路径。该递归在其他方面与对相对路径名的描述相同。根据 locking invariant
,从根节点开始遍历前删除此节点上的锁,这对于避免可能发生的死锁是至关重要的。
- 指定者:
- 类
preferences
中的 node
- 参数:
path
- 要返回的首选项节点的路径名。
- 返回:
- 指定的首选项节点。
- 抛出:
illegalargumentexception
- 如果路径名无效(即它包含多个连续的斜杠字符,或者以斜杠字符结束并且大于一个 long 字符)。
illegalstateexception
- 如果已经使用 removenode()
方法移除了此节点(或其祖先)。- 另请参见:
preferences.flush()