java.lang.Object
javax.naming.CompositeName
- 所有已实现的接口:
Serializable,Cloneable,Comparable<Object>,Name
此类表示一个复合名称——一系列跨越多个名称空间的组件名称。每个组件都是来自命名系统命名空间的字符串名称。如果组件来自分层命名空间,则可以使用 CompoundName 类将该组件进一步解析为其原子部分。
复合名称的组成部分是有编号的。具有 N 个组件的复合名称的索引范围从 0 到但不包括 N。此范围可以写为 [0,N)。最重要的组件位于索引 0 处。空的复合名称没有组件。
JNDI 复合名称语法
JNDI 定义了复合名称的标准字符串表示。此表示法是使用组件分隔符(正斜杠字符 (/))从左到右连接复合名称的组件以分隔每个组件。 JNDI 语法定义了以下元字符:- 转义(反斜杠\),
- 引号字符(单引号 (') 和双引号 (")),以及
- 组件分隔符(正斜杠字符 (/))。
比较两个复合名称时,字符的大小写很重要。
前导组件分隔符(复合名称字符串以分隔符开头)表示前导空组件(由空字符串组成的组件)。尾随组件分隔符(复合名称字符串以分隔符结尾)表示尾随空组件。相邻的组件分隔符表示一个空组件。
复合名称示例
此表显示了一些复合名称的示例。每行显示复合名称的字符串形式及其对应的结构形式 (CompositeName)。
| 字符串名称 | CompositeName |
|---|---|
| "" | {}(空名称 == new CompositeName("") == new CompositeName()) |
| “X” | {“X”} |
| “x/y” | {“x”,“y”} |
| “X/” | {"x", ""} |
| “/X” | {““, “X”} |
| "/" | {""} |
| "//" | {"", ""} |
| “/X/” | {““, “X”, ””} |
| “x//y” | {"x", "", "y"} |
组成示例
这里有一些组合示例。右列显示组合字符串复合名称,而左列显示组合相应的CompositeName s。请注意,组合两个复合名称的字符串形式只涉及将它们的字符串形式连接在一起。
| 字符串名称 | CompositeNames |
|---|---|
| "x/y" + "/" = x/y/ | {"x", "y"} + {""} = {"x", "y", ""} |
| "" + "x" = "x" | {} + {“x”} = {“x”} |
| "/" + "x" = "/x" | {""} + {"x"} = {"", "x"} |
| “x”+“”+“”=“x” | {“x”} + {} + {} = {“x”} |
多线程访问
CompositeName 实例未针对并发多线程访问进行同步。尝试访问和修改 CompositeName 的多个线程应该锁定该对象。
- 自从:
- 1.3
- 参见:
-
构造方法总结
构造方法修饰符构造方法描述构造一个新的空复合名称。通过使用复合名称语法(从左到右,斜线分隔)解析字符串 n 来构造一个新的复合名称实例。protectedCompositeName(Enumeration<String> comps) 使用“comps”指定的组件构造一个新的复合名称实例。 -
方法总结
修饰符和类型方法描述在此复合名称中的指定位置添加单个组件。将单个组件添加到此复合名称的末尾。在此复合名称中的指定位置按顺序添加复合名称的组件。将复合名称的组件按顺序添加到此复合名称的末尾。clone()生成此复合名称的副本。int将此 CompositeName 与指定的 Object 进行比较以获得顺序。boolean确定复合名称是否是此复合名称的后缀。boolean确定两个复合名称是否相等。get(int posn) 检索此复合名称的组件。getAll()检索此复合名称的组件作为字符串枚举。getPrefix(int posn) 创建一个复合名称,其组件由该复合名称中组件的前缀组成。getSuffix(int posn) 创建一个复合名称,其组件由该复合名称中组件的后缀组成。inthashCode()计算此复合名称的哈希码。booleanisEmpty()确定此复合名称是否为空。remove(int posn) 从此复合名称中删除一个组件。intsize()检索此复合名称中的组件数。booleanstartsWith(Name n) 确定复合名称是否是该复合名称的前缀。toString()生成此复合名称的字符串表示形式。
-
构造方法详细信息
-
CompositeName
使用“comps”指定的组件构造一个新的复合名称实例。当 CompositeName 的子类重写诸如 clone()、getPrefix()、getSuffix() 等方法时,此受保护的方法将供它们使用。- 参数:
comps- 包含新复合名称组件的非空枚举。每个元素都属于 String 类。将使用枚举来提取其元素。
-
CompositeName
通过使用复合名称语法(从左到右,斜线分隔)解析字符串 n 来构造一个新的复合名称实例。复合名称语法在类描述中有详细描述。- 参数:
n- 要解析的非空字符串。- 抛出:
InvalidNameException- 如果 n 具有无效的复合名称语法。
-
CompositeName
public CompositeName()构造一个新的空复合名称。当在其上调用isEmpty()时,这样的名称返回 true。
-
-
方法详情
-
toString
生成此复合名称的字符串表示形式。字符串表示包括按顺序枚举复合名称的每个组件并用正斜杠字符分隔每个组件。根据类描述中描述的 JNDI 语法,在必要时应用引号和转义字符。空组件由空字符串表示。这样生成的字符串表示可以传递给 CompositeName 构造方法以创建一个新的等效复合名称。 -
equals
确定两个复合名称是否相等。如果 obj 为 null 或不是复合名称,则返回 false。如果一个中的每个组件都等于另一个中的相应组件,则两个复合名称相等。这意味着两者具有相同数量的组件,并且每个组件针对其他名称中的相应组件的 equals() 测试返回 true。 -
hashCode
public int hashCode()计算此复合名称的哈希码。散列码是该复合名称的各个组成部分的散列码之和。 -
compareTo
将此 CompositeName 与指定的 Object 进行比较以获得顺序。返回负整数、零或正整数,因为此名称小于、等于或大于给定的对象。如果 obj 为空或不是 CompositeName 的实例,则抛出 ClassCastException。
有关两个复合名称相等的含义,请参见 equals()。如果两个复合名称相等,则返回 0。
复合名称的排序遵循字符串比较的字典顺序规则,扩展适用于复合名称中的所有组件。效果就好像所有组件都按其指定的顺序排列,并且字典规则应用于两个排列。如果此复合名称“按字典顺序”小于 obj,则返回负数。如果此复合名称“按字典顺序”大于 obj,则返回一个正数。
- 指定者:
compareTo在接口Comparable<Object>中- 指定者:
compareTo在接口Name中- 参数:
obj- 要比较的非空对象。- 返回:
- 负整数、零或正整数,因为此名称小于、等于或大于给定的对象。
- 抛出:
ClassCastException- 如果 obj 不是 CompositeName。- 参见:
-
clone
生成此复合名称的副本。更改此复合名称的组件不会影响新副本,反之亦然。 -
size
public int size()检索此复合名称中的组件数。 -
isEmpty
public boolean isEmpty()确定此复合名称是否为空。如果复合名称具有零个组件,则它是空的。 -
getAll
检索此复合名称的组件作为字符串枚举。更新此复合名称对此枚举的影响未定义。 -
get
检索此复合名称的组件。- 指定者:
get在接口Name中- 参数:
posn- 要检索的组件的基于 0 的索引。必须在 [0,size()) 范围内。- 返回:
- 索引位置的非空组件。
- 抛出:
ArrayIndexOutOfBoundsException- 如果 posn 超出指定范围。
-
getPrefix
创建一个复合名称,其组件由该复合名称中组件的前缀组成。对该复合名称的后续更改不会影响返回的名称。- 指定者:
getPrefix在接口Name中- 参数:
posn- 停止的组件的从 0 开始的索引。必须在 [0,size()] 范围内。- 返回:
- 由 [0,posn) 范围内索引处的组件组成的复合名称。
- 抛出:
ArrayIndexOutOfBoundsException- 如果 posn 超出指定范围。
-
getSuffix
创建一个复合名称,其组件由该复合名称中组件的后缀组成。对该复合名称的后续更改不会影响返回的名称。- 指定者:
getSuffix在接口Name中- 参数:
posn- 从 0 开始的组件索引。必须在 [0,size()] 范围内。- 返回:
- 由 [posn,size()) 范围内索引处的组件组成的复合名称。如果 posn 等于 size(),则返回一个空的复合名称。
- 抛出:
ArrayIndexOutOfBoundsException- 如果 posn 超出指定范围。
-
startsWith
确定复合名称是否是该复合名称的前缀。如果复合名称“n”等于 getPrefix(n.size()),则它是一个前缀——换句话说,该复合名称以“n”开头。如果 'n' 为 null 或不是复合名称,则返回 false。- 指定者:
startsWith在接口Name中- 参数:
n- 要检查的可能为空的名称。- 返回:
- 如果 n 是 CompositeName 并且是此复合名称的前缀,则返回 true,否则返回 false。
-
endsWith
确定复合名称是否是此复合名称的后缀。如果复合名称“n”等于 getSuffix(size()-n.size()),则它是一个后缀——换句话说,此复合名称以“n”结尾。如果 n 为 null 或不是复合名称,则返回 false。 -
addAll
将复合名称的组件按顺序添加到此复合名称的末尾。- 指定者:
addAll在接口Name中- 参数:
suffix- 要添加的非空组件。- 返回:
- 更新后的 CompositeName,不是新的。不能为空。
- 抛出:
InvalidNameException- 如果后缀不是复合名称。
-
addAll
在此复合名称中的指定位置按顺序添加复合名称的组件。在第一个新组件的索引处或之后的此复合名称的组件向上移动(远离索引 0)以容纳新组件。- 指定者:
addAll在接口Name中- 参数:
posn- 在此名称中添加新组件的索引。必须在 [0,size()] 范围内。n- 要添加的非空组件。- 返回:
- 更新后的 CompositeName,不是新的。不能为空。
- 抛出:
InvalidNameException- 如果 n 不是复合名称。ArrayIndexOutOfBoundsException- 如果 posn 超出指定范围。
-
add
将单个组件添加到此复合名称的末尾。- 指定者:
add在接口Name中- 参数:
comp- 要添加的非空组件。- 返回:
- 更新后的 CompositeName,不是新的。不能为空。
- 抛出:
InvalidNameException- 如果在名称末尾添加 comp 会违反名称的语法。
-
add
在此复合名称中的指定位置添加单个组件。此复合名称的位于新组件索引处或之后的组件向上移动一位(远离索引 0)以容纳新组件。- 指定者:
add在接口Name中- 参数:
posn- 添加新组件的索引。必须在 [0,size()] 范围内。comp- 要添加的非空组件。- 返回:
- 更新后的 CompositeName,不是新的。不能为空。
- 抛出:
ArrayIndexOutOfBoundsException- 如果 posn 超出指定范围。InvalidNameException- 如果在指定位置添加 comp 会违反名称的语法。
-
remove
从此复合名称中删除一个组件。此复合名称在位置 'posn' 的组件被删除,索引大于 'posn' 的组件向下移动(向索引 0)一个。- 指定者:
remove在接口Name中- 参数:
posn- 要删除的组件的索引。必须在 [0,size()) 范围内。- 返回:
- 已删除的组件(一个字符串)。
- 抛出:
ArrayIndexOutOfBoundsException- 如果 posn 超出指定范围(包括复合名称为空的情况)。InvalidNameException- 如果删除组件会违反名称的语法。
-