javax.naming

接口
异常
java.lang.Object
  继承者 javax.naming.CompositeName
所有已实现的接口:
Serializable, Cloneable, Comparable< Object>, Name

public class CompositeName
     
extends Object
implements Name

此类表示一个复合名称,即一个跨多个名称空间组件名称的序列。每个组件都是一个取自命名系统名称空间的字符串名称。如果组件取自层次名称空间,则可以通过使用 CompoundName 类将该组件进一步解析成其原子部分。

复合名称的组件都已编号。带 N 个组件的复合名称的索引在 0 到 N(但不包括 N)的范围内变动。可将该范围写为 [0,N)。最重要的组件位于索引 0 处。空复合名称没有组件。

JNDI 复合名称语法

JNDI 定义了复合名称的标准字符串表示形式。此表示形式是复合名称组件从左到右的串联,并使用组件分隔符(正斜杠字符 (/))来分隔每个组件。JNDI 语法定义了以下元字符:
  • 转义符(反斜杠 \),
  • 引用字符(单引号 (') 和双引号 (")),
  • 组件分隔符(正斜杠字符 (/))。
在将某个组件组合到复合名称字符串中时,在该组件中出现的任何前引号、先于任何元字符的转义符、位于组件末尾的转义符或者结束引用组件中的组件分隔符之前都必须加上转义字符。此外,为了避免像上述那样添加转义字符,可以使用匹配的单引号或匹配的双引号将整个组件放入引号中。出现在双引号引用的组件中的单引号不被认为是元字符(并且无需被转义),反之亦然。

在比较两个复合名称时,字符的大小写很重要。

前导组件分隔符(复合名称字符串以分隔符开始)表示一个前导空组件(由空字符串组成的组件)。尾部组件分隔符(复合名称以分隔符结束)表示一个尾部空组件。相邻的组件分隔符表示一个空组件。

复合名称示例

此表展示了一些复合名称的示例。每一行表示一个复合名称的字符串形式及其相应的结构形式 ( CompositeName)。

字符串名称 CompositeName
"" {} (the empty name == 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
另请参见:
序列化表格

构造方法摘要
  CompositeName()
          构造一个新的空复合名称。
protected CompositeName(Enumeration<String> comps)
          使用由 'comps' 指定的组件构造一个新的复合名称实例。
  CompositeName(String n)
          通过使用复合名称语法(从左到右,用斜杠分隔)解析字符串 n 来构造一个新的复合名称实例。
 
方法摘要
 Name add(int posn, String comp)
          在此复合名称中的指定位置添加单个组件。
 Name add(String comp)
          将单个组件添加到此复合名称的末尾。
 Name addAll(int posn, Name n)
          按顺序将复合名称的组件添加到此复合名称中的指定位置。
 Name addAll(Name suffix)
          按顺序将复合名称的组件添加到此复合名称的末尾。
 Object clone()
          生成此复合名称的副本。
 int compareTo(Object obj)
          比较此 CompositeName 与指定 Object 的顺序。
 boolean endsWith(Name n)
          确定某一复合名称是否是此复合名称的后缀。
 boolean equals(Object obj)
          确定两个复合名称是否相等。
 String get(int posn)
          检索此复合名称的组件。
 Enumeration<String> getAll()
          以字符串枚举的形式检索此复合名称的组件。
 Name getPrefix(int posn)
          创建一个复合名称,其组件由此复合名称中组件的前缀组成。
 Name getSuffix(int posn)
          创建一个复合名称,其组件由此复合名称中组件的后缀组成。
 int hashCode()
          计算此复合名称的哈希码。
 boolean isEmpty()
          确定此复合名称是否为空。
 Object remove(int posn)
          从此复合名称中删除一个组件。
 int size()
          检索此复合名称中的组件数。
 boolean startsWith(Name n)
          确定某一复合名称是否是此复合名称的前缀。
 String toString()
          生成此复合名称的字符串表示形式。
 
从类 java.lang.Object 继承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 

构造方法详细信息

CompositeName

protected CompositeName(Enumeration<String> comps)
使用由 'comps' 指定的组件构造一个新的复合名称实例。这个受保护的方法将由 CompositeName 的子类在重写一些方法(比如 clone()、getPrefix() 和 getSuffix())时使用。

参数:
comps - 包含新复合名称组件的非 null 枚举。每个元素都属于 String 类。该枚举将被用来提取其元素。

CompositeName

public CompositeName(String n)
              throws InvalidNameException
通过使用复合名称语法(从左到右,用斜杠分隔)解析字符串 n 来构造一个新的复合名称实例。复合名称语法在类描述中有详细说明。

参数:
n - 要解析的非 null 字符串。
抛出:
InvalidNameException - 如果 n 的复合名称语法无效。

CompositeName

public CompositeName()
构造一个新的空复合名称。当在此类名称上调用 isEmpty() 时将返回 true。

方法详细信息

toString

public String toString()
生成此复合名称的字符串表示形式。该字符串表示形式通过按顺序枚举复合名称的每个组件并用正斜杠字符分隔每个组件组成。根据 JNDI 语法(该语法在类描述中进行了说明)在必要处使用引用字符和转义字符。空组件用空字符串表示。 如此生成的字符串表示形式可以传递给 CompositeName 构造方法,以创建一个新的等效复合名称。

覆盖:
Object 中的 toString
返回:
此复合名称的非 null 字符串表示形式。

equals

public boolean equals(Object obj)
确定两个复合名称是否相等。如果 obj 为 null 或者不是一个复合名称,则返回 false。如果一个复合名称中的每个组件都等于另一个复合名称中的相应组件,则两个复合名称相等。这暗示着两个复合名称有相同数量的组件,并且每个组件与另一个名称中相应组件的 equals() 测试都返回 true。

覆盖:
Object 中的 equals
参数:
obj - 要比较的可能为 null 的对象。
返回:
如果 obj 等于此复合名称,则返回 true,否则返回 false。
另请参见:
hashCode()

hashCode

public int hashCode()
计算此复合名称的哈希码。该哈希码是此复合名称各个组件哈希码的总和。

覆盖:
Object 中的 hashCode
返回:
表示此名称的哈希码的 int。
另请参见:
equals(java.lang.Object)

compareTo

public int compareTo(Object obj)
比较此 CompositeName 与指定 Object 的顺序。根据此 Name 小于、等于还是大于指定 Object 分别返回负整数、零或正整数。

如果 obj 为 null 或者不是一个 CompositeName 实例,则抛出 ClassCastException。

关于这对两个复合名称相等性的意义,请参见 equals()。如果两个复合名称是相等的,则返回 0。

复合名称的排序遵从字符串比较的字典规则,并将此扩展到应用于复合名称中的所有组件。效果就像将所有组件按照指定的顺序排列起来,并在两个队列上应用字典规则。如果此复合名称“按字典顺序”小于 obj,则返回一个负数。如果此复合名称“按字典顺序”大于 obj,则返回一个正数。

指定者:
接口 Comparable<Object> 中的 compareTo
指定者:
接口 Name 中的 compareTo
参数:
obj - 要与之比较的非 null 对象。
返回:
根据此 Name 小于、等于还是大于指定 Object 分别返回负整数、零或正整数。
抛出:
ClassCastException - 如果 obj 不是 CompositeName。
另请参见:
Comparable.compareTo(Object)

clone

public Object clone()
生成此复合名称的副本。对此复合名称的组件进行的更改不会影响新副本,反之亦然。

指定者:
接口 Name 中的 clone
覆盖:
Object 中的 clone
返回:
此复合名称的非 null 副本。
另请参见:
Cloneable

size

public int size()
检索此复合名称中的组件数。

指定者:
接口 Name 中的 size
返回:
此复合名称中的非负组件数。

isEmpty

public boolean isEmpty()
确定此复合名称是否为空。如果复合名称没有任何组件,则该名称为空。

指定者:
接口 Name 中的 isEmpty
返回:
如果此复合名称为空,则返回 true,否则返回 false。

getAll

public Enumeration<String> getAll()
以字符串枚举的形式检索此复合名称的组件。在此枚举上更新此复合名称的结果是不确定的。

指定者:
接口 Name 中的 getAll
返回:
此复合名称组件的非 null 枚举。每个枚举元素都属于 String 类。

get

public String get(int posn)
检索此复合名称的组件。

指定者:
接口 Name 中的 get
参数:
posn - 要检索的从 0 开始的组件索引。该索引必须在范围 [0,size()) 内。
返回:
位于索引 posn 处的非 null 组件。
抛出:
ArrayIndexOutOfBoundsException - 如果 posn 超出指定范围。

getPrefix

public Name getPrefix(int posn)
创建一个复合名称,其组件由此复合名称中组件的前缀组成。对此复合名称进行的后续更改不会影响返回的名称。

指定者:
接口 Name 中的 getPrefix
参数:
posn - 从 0 开始的组件索引,在该索引处停止。该索引必须在范围 [0,size()] 内。
返回:
由索引范围在 [0,posn) 之间的组件组成的复合名称。
抛出:
ArrayIndexOutOfBoundsException - 如果 posn 超出指定范围。

getSuffix

public Name getSuffix(int posn)
创建一个复合名称,其组件由此复合名称中组件的后缀组成。对此复合名称进行的后续更改不会影响返回的名称。

指定者:
接口 Name 中的 getSuffix
参数:
posn - 从 0 开始的组件索引,在该索引处开始。该索引必须在范围 [0,size()] 内。
返回:
由索引范围在 [posn,size()) 之间的组件组成的复合名称。如果 posn 等于 size(),则返回一个空复合名称。
抛出:
ArrayIndexOutOfBoundsException - 如果 posn 超出指定范围。

startsWith

public boolean startsWith(Name n)
确定某一复合名称是否是此复合名称的前缀。如果某一复合名称 'n' 等于 getPrefix(n.size()),则该名称是一个前缀,换句话说,此复合名称从 'n' 开始。如果 'n' 为 null 或者不是一个复合名称,则返回 false。

指定者:
接口 Name 中的 startsWith
参数:
n - 要检查的可能为 null 的名称。
返回:
如果 n 是一个 CompositeName 并且是此复合名称的前缀,则返回 true,否则返回 false。

endsWith

public boolean endsWith(Name n)
确定某一复合名称是否是此复合名称的后缀。如果某一复合名称 'n' 等于 getSuffix(size()-n.size()),则该名称是一个后缀,换句话说,此复合名称以 'n' 结尾。如果 n 为 null 或者不是一个复合名称,则返回 false。

指定者:
接口 Name 中的 endsWith
参数:
n - 要检查的可能为 null 的名称。
返回:
如果 n 是一个 CompositeName 并且是此复合名称的后缀,则返回 true,否则返回 false。

addAll

public Name addAll(Name suffix)
            throws InvalidNameException
按顺序将复合名称的组件添加到此复合名称的末尾。

指定者:
接口 Name 中的 addAll
参数:
suffix - 要添加的非 null 组件。
返回:
已更新的 CompositeName,而不是一个新的 CompositeName。不能为 null。
抛出:
InvalidNameException - 如果后缀不是一个复合名称。

addAll

public Name addAll(int posn,
                   Name n)
            throws InvalidNameException
按顺序将复合名称的组件添加到此复合名称中的指定位置。此复合名称位于第一个新组件的索引处或这之后的组件被上移(远离索引 0),以容纳新组件。

指定者:
接口 Name 中的 addAll
参数:
n - 要添加的非 null 组件。
posn - 此名称中的索引,将在该索引处添加新组件。该索引必须在范围 [0,size()] 内。
返回:
已更新的 CompositeName,而不是一个新的 CompositeName。不能为 null。
抛出:
InvalidNameException - 如果 n 不是一个复合名称。
ArrayIndexOutOfBoundsException - 如果 posn 超出指定范围。

add

public Name add(String comp)
         throws InvalidNameException
将单个组件添加到此复合名称的末尾。

指定者:
接口 Name 中的 add
参数:
comp - 要添加的非 null 组件。
返回:
已更新的 CompositeName,而不是一个新的 CompositeName。不能为 null。
抛出:
InvalidNameException - 如果在该名称末尾添加 comp 违反该名称的语法。

add

public Name add(int posn,
                String comp)
         throws InvalidNameException
在此复合名称中的指定位置添加单个组件。此复合名称位于新组件的索引处或这之后的组件被上移(远离索引 0)一位,以容纳新组件。

指定者:
接口 Name 中的 add
参数:
comp - 要添加的非 null 组件。
posn - posn 在其所在位置处添加新组件的索引。该索引必须在范围 [0,size()) 内。
返回:
已更新的 CompositeName,而不是一个新的 CompositeName。不能为 null。
抛出:
ArrayIndexOutOfBoundsException - 如果 posn 超出指定范围。
InvalidNameException - 如果在指定位置添加 comp 违反该名称的语法。

remove

public Object remove(int posn)
              throws InvalidNameException
从此复合名称中删除一个组件。移除此复合名称位置 'posn' 处的组件,而位于大于 'posn' 索引处的组件都将下移(朝着索引 0)一位。

指定者:
接口 Name 中的 remove
参数:
posn - 要删除的组件的索引。该索引必须在范围 [0,size()) 内。
返回:
移除的组件(一个 String)。
抛出:
ArrayIndexOutOfBoundsException - 如果 posn 超出指定范围(包括复合名称为空的情况)。
InvalidNameException - 如果删除组件违反该名称的语法。