java.lang.Object
javax.naming.CompositeName
- 所有已实现的接口:
-
Serializable
,Cloneable
,Comparable<Object>
,Name
该类表示一个复合名称 -- 跨越多个命名空间的组件名称序列。每个组件都是来自命名系统命名空间的字符串名称。如果组件来自分层命名空间,则可以使用CompoundName类将该组件进一步解析为其原子部分。
复合名称的组件是按顺序编号的。具有N个组件的复合名称的索引范围从0到N,但不包括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
。请注意,组合两个复合名称的字符串形式只涉及将它们的字符串形式连接在一起。
字符串名称 | 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
- 参见:
-
Constructor Summary
ModifierConstructorDescription构造一个新的空复合名称。通过使用复合名称语法(从左到右,斜杠分隔)解析字符串n来构造一个新的复合名称实例。protected
CompositeName
(Enumeration<String> comps) 使用由'comps'指定的组件构造一个新的复合名称实例。 -
Method Summary
Modifier and TypeMethodDescription在此复合名称中的指定位置添加单个组件。在此复合名称末尾添加单个组件。按顺序在此复合名称的指定位置添加复合名称的组件。按顺序在此复合名称末尾添加复合名称的组件。clone()
生成此复合名称的副本。int
将此CompositeName与指定的Object进行比较以确定顺序。boolean
确定复合名称是否为此复合名称的后缀。boolean
确定两个复合名称是否相等。get
(int posn) 检索此复合名称的组件。getAll()
将此复合名称的组件作为字符串枚举检索。getPrefix
(int posn) 创建一个复合名称,其组件由此复合名称中的组件前缀组成。getSuffix
(int posn) 创建一个复合名称,其组件由此复合名称中的组件后缀组成。int
hashCode()
计算此复合名称的哈希码。boolean
isEmpty()
确定此复合名称是否为空。remove
(int posn) 从此复合名称中删除一个组件。int
size()
检索此复合名称中的组件数。boolean
startsWith
(Name n) 确定复合名称是否为此复合名称的前缀。toString()
生成此复合名称的字符串表示形式。
-
Constructor Details
-
CompositeName
使用由'comps'指定的组件构造一个新的复合名称实例。此受保护方法旨在由CompositeName的子类在覆盖诸如clone()、getPrefix()、getSuffix()等方法时使用。- 参数:
-
comps
- 包含新复合名称的组件的非空枚举。每个元素都是String类。将使用该枚举来提取其元素。
-
CompositeName
通过使用复合名称语法(从左到右,斜杠分隔)解析字符串n来构造一个新的复合名称实例。复合名称语法在类描述中有详细描述。- 参数:
-
n
- 要解析的非空字符串。 - 抛出:
-
InvalidNameException
- 如果n具有无效的复合名称语法。
-
CompositeName
public CompositeName()构造一个新的空复合名称。当对其调用isEmpty()
时,这样的名称将返回true。
-
-
Method Details
-
toString
生成此复合名称的字符串表示形式。字符串表示形式包括按顺序枚举复合名称的每个组件,并使用正斜杠字符分隔每个组件。根据JNDI语法,必要时应用引号和转义字符,该语法在类描述中有详细描述。空组件由空字符串表示。因此生成的字符串表示形式可以传递给CompositeName构造函数,以创建一个新的等效复合名称。 -
equals
确定两个复合名称是否相等。如果obj为null或不是复合名称,则返回false。如果一个复合名称中的每个组件等于另一个复合名称中的相应组件,则两个复合名称相等。这意味着两者具有相同数量的组件,并且每个组件的equals()测试与另一个名称中的相应组件返回true。 -
hashCode
public int hashCode()计算此复合名称的哈希码。哈希码是此复合名称各个组件的哈希码之和。 -
compareTo
将此CompositeName与指定的对象进行比较以确定顺序。如果此名称小于、等于或大于给定对象,则返回负整数、零或正整数。如果obj为null或不是CompositeName的实例,则会抛出ClassCastException异常。
请参阅equals()以了解两个复合名称何时相等。如果两个复合名称相等,则返回0。
复合名称的排序遵循字符串比较的词典规则,其中所有组件都适用。效果就好像所有组件都按照指定的顺序排列,并且词典规则应用于这两个排列。如果此复合名称在“词典上”小于obj,则返回负数。如果此复合名称在“词典上”大于obj,则返回正数。
- 指定者:
-
compareTo
在接口Comparable<Object>
- 指定者:
-
compareTo
在接口Name
- 参数:
-
obj
- 要与之比较的非null对象。 - 返回:
- 负整数、零或正整数,表示此名称小于、等于或大于给定对象。
- 抛出:
-
ClassCastException
- 如果obj不是CompositeName。 - 另请参阅:
-
clone
生成此复合名称的副本。对此复合名称的组件进行更改不会影响新副本,反之亦然。 -
size
public int size()检索此复合名称中的组件数。 -
isEmpty
public boolean isEmpty()确定此复合名称是否为空。如果复合名称有零个组件,则为空。 -
getAll
检索此复合名称的组件作为字符串枚举。对此复合名称的更新对此枚举的影响是未定义的。 -
get
检索此复合名称的一个组件。- 指定者:
-
get
在接口Name
- 参数:
-
posn
- 要检索的组件的基于0的索引。必须在范围[0,size())内。 - 返回:
- 索引posn处的非null组件。
- 抛出:
-
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'是前缀。如果'n'为null或不是复合名称,则返回false。- 指定者:
-
startsWith
在接口Name
- 参数:
-
n
- 要检查的可能为null的名称。 - 返回:
- 如果n是CompositeName并且是此复合名称的前缀,则为true;否则为false。
-
endsWith
确定一个复合名称是否是此复合名称的后缀。如果复合名称'n'等于getSuffix(size()-n.size()),换句话说,此复合名称以'n'结尾,则复合名称'n'是后缀。如果'n'为null或不是复合名称,则返回false。 -
addAll
将一个复合名称的组件按顺序添加到此复合名称的末尾。- 指定者:
-
addAll
在接口Name
- 参数:
-
suffix
- 要添加的非null组件。 - 返回:
- 更新后的CompositeName,而不是新的。不能为null。
- 抛出:
-
InvalidNameException
- 如果suffix不是复合名称。
-
addAll
将一个复合名称的组件按顺序添加到此复合名称中的指定位置。此复合名称中的索引大于或等于第一个新组件的索引的组件向上移动(远离索引0)以容纳新组件。- 指定者:
-
addAll
在接口Name
- 参数:
-
posn
- 要添加新组件的此名称中的索引。必须在范围[0,size()]内。 -
n
- 要添加的非null组件。 - 返回:
- 更新后的CompositeName,而不是新的。不能为null。
- 抛出:
-
InvalidNameException
- 如果n不是复合名称。 -
ArrayIndexOutOfBoundsException
- 如果posn超出指定范围。
-
add
将单个组件添加到此复合名称的末尾。- 指定者:
-
add
在接口Name
- 参数:
-
comp
- 要添加的非null组件。 - 返回:
- 更新后的CompositeName,而不是新的。不能为null。
- 抛出:
-
InvalidNameException
- 如果在名称末尾添加comp会违反名称的语法。
-
add
在此复合名称中的指定位置添加单个组件。此复合名称中的索引大于或等于新组件的索引的组件将向上移动一个位置(远离索引0)以容纳新组件。- 指定者:
-
add
在接口Name
中 - 参数:
-
posn
- 要添加新组件的索引。必须在范围[0,size()]内。 -
comp
- 要添加的非空组件。 - 返回值:
- 更新后的CompositeName,而不是新的。不能为null。
- 抛出:
-
ArrayIndexOutOfBoundsException
- 如果posn超出指定范围。 -
InvalidNameException
- 如果在指定位置添加comp会违反名称的语法。
-
remove
从此复合名称中删除一个组件。删除位置'posn'处的此复合名称的组件,并将索引大于'posn'的组件向下移动(朝向索引0)一个位置。- 指定者:
-
remove
在接口Name
中 - 参数:
-
posn
- 要删除的组件的索引。必须在范围[0,size())内。 - 返回值:
- 已删除的组件(一个字符串)。
- 抛出:
-
ArrayIndexOutOfBoundsException
- 如果posn超出指定范围(包括复合名称为空的情况)。 -
InvalidNameException
- 如果删除组件会违反名称的语法。
-