JavaTM Platform
Standard Ed. 6

javax.naming
类 CompoundName

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

public class CompoundName
extends Object
implements Name

此类表示一个组合名称,即一个取自层次名称空间的名称。组合名称中的每个组件都是一个原子名称。

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

组合名称语法

组合名称的语法是使用一组属性指定的:
jndi.syntax.direction
解析的方向("right_to_left"、"left_to_right" 和 "flat")。如果未指定,则默认为 "flat",这意味着名称空间是平面的,没有层次结构。
jndi.syntax.separator
原子名称组件之间的分隔符。在方向不为 "flat" 时需要。
jndi.syntax.ignorecase
如果该属性存在,则 "true" 意味着在比较名称组件时忽略大小写。如果其值不为 "true",或者该属性不存在,则在比较名称组件时要考虑大小写。
jndi.syntax.escape
如果该属性存在,则指定用于重写分隔符、转义符和引号的转义字符串。
jndi.syntax.beginquote
如果该属性存在,则指定划分所引用字符串开始界限的字符串。
jndi.syntax.endquote
划分所引用字符串的结尾界限的字符串。如果该属性存在,则指定划分所引用字符串结尾界限的字符串。如果该属性不存在,则使用 syntax.beginquote 作为结尾引号。
jndi.syntax.beginquote2
可供选择的一组开始/结束引号。
jndi.syntax.endquote2
可供选择的一组开始/结束引号。
jndi.syntax.trimblanks
如果该属性存在,则 "true" 意味着裁剪名称组件中的所有前导空白和结尾空白,以便于进行比较。如果该属性的值不为 "true",或者该属性不存在,则空白是有意义的。
jndi.syntax.separator.ava
如果该属性存在,则在指定多个属性/值对时指定分隔属性 - 值 - 断言的字符串。(例如,age=65,gender=male 中的 ",")。
jndi.syntax.separator.typeval
如果该属性存在,则指定分隔属性与值的字符串(例如,"age=65" 中的 "=")。
这些属性都是根据以下规则进行解释的:
  1. 在没有引号或转义符的字符串中,分隔符的任何实例都可以划分两个原子名称的界限。每个原子名称被称为一个组件
  2. 分隔符、引号或转义符在其前面(左边)直接接有转义符时被转义。
  3. 如果有两组引号,特定的开始引号 (begin-quote) 必须与其相应的结束引号 (end-quote) 匹配。
  4. 位于组件之前的非转义开始引号必须与位于该组件结尾的非转义结束引号匹配。如此引用的组件称为引用组件。如果该组件没有应用下列涉及引用组件的规则之一,则通过移除开始引号和结束引号并将插入的字符视为普通字符来解析该组件。
  5. 嵌入非引用组件中的引号被视为普通字符串,无需匹配。
  6. 被转义或出现在非转移引号之间的分隔符被视为普通字符串,不再是分隔符。
  7. 引用组件中的转义字符串仅在后跟相应结束引用字符串时才是转义符。可以利用这一点将一个转义引号嵌套在引用组件中。
  8. 一个已转义的转义字符串不再被视为转义字符串。
  9. 不位于元字符串(引号或分隔符)之前的转义字符串以及不位于组件结尾处的转义字符串被视为普通字符串。
  10. 前导分隔符(组合名称字符串以分隔符开始)表示一个前导空原子组件(由空字符串组成)。尾部分隔符(组合名称以分隔符结束)表示一个尾部空原子组件。相邻分隔符表示一个空原子组件。

组合名称的字符串形式遵从上述语法。当将组合名称的组件转换成其字符串表示形式时,将应用上述保留语法规则(例如,嵌套的分隔符被转义或引用),以便在解析相同的字符串时,将产生相同的原始组合名称组件。

多线程访问

CompoundName 实例与并发多线程访问不同步。尝试访问并修改 CompoundName 的多个线程应该锁定对象。

从以下版本开始:
1.3
另请参见:
序列化表格

字段摘要
protected  javax.naming.NameImpl impl
          此组合名称的实现。
protected  Properties mySyntax
          此组合名称的语法属性。
 
构造方法摘要
protected CompoundName(Enumeration<String> comps, Properties syntax)
          使用 comps 和 syntax 指定的组件构造一个新的组合名称实例。
  CompoundName(String n, Properties syntax)
          通过解析使用提供的 syntax 属性所指定的语法的字符串 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)
          比较此 CompoundName 与指定 Object 的顺序。
 boolean endsWith(Name n)
          确定某一组合名称是否是此组合名称的后缀。
 boolean equals(Object obj)
          确定 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
 

字段详细信息

impl

protected transient javax.naming.NameImpl impl
此组合名称的实现。此字段由构造方法初始化,不能为 null。子类应该将其视为只读变量。


mySyntax

protected transient Properties mySyntax
此组合名称的语法属性。此字段由构造方法初始化,不能为 null。子类应该将其视为只读变量。对 mySyntax 进行的所有必要更改都应该在构造方法内而不是实例化组合名称后完成。

构造方法详细信息

CompoundName

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

参数:
comps - 要添加的非 null 组件枚举。该枚举的每个元素都属于 String 类。该枚举将被用来提取其元素。
syntax - 指定此组合名称语法的非 null 属性。有关这些属性的内容,请参阅类描述。

CompoundName

public CompoundName(String n,
                    Properties syntax)
             throws InvalidNameException
通过解析使用提供的 syntax 属性所指定的语法的字符串 n 来构造一个新的组合名称实例。

参数:
n - 要解析的非 null 字符串。
syntax - 指定此组合名称语法的非 null 属性列表。有关这些属性的内容,请参阅类描述。
抛出:
InvalidNameException - 如果 'n' 违反 syntax 指定的语法。
方法详细信息

toString

public String toString()
使用组合名称的语法规则生成此组合名称的字符串表示形式。这些语法规则已在类描述中说明。空组件用空字符串表示。 如此生成的字符串表示形式可以传递给具有相同 syntax 属性的 CompoundName 构造方法,以创建一个新的等效组合名称。

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

equals

public boolean equals(Object obj)
确定 obj 在语法上是否等同于此组合名称。如果 obj 为 null 或者不是一个 CompoundName,则返回 false。如果一个组合名称中的每个组件都“等于”另一个组合名称中的相应组件,则这两个组合名称相等。

相等性也是根据此组合名称的语法定义的。CompoundName 的默认实现在比较两个组件的相等性时使用语法属性 jndi.syntax.ignorecase 和 jndi.syntax.trimblanks。如果忽略大小写,则具有相同字符顺序但大小写不同的两个字符串被认为是相等的。如果将去除空白,则为进行比较将忽略前导空白和结尾空白。

两个组合名称必须有相同的组件数。

实现注意事项:当前,不比较两个组合名称语法属性的相等性。这有可能在以后实现。

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

hashCode

public int hashCode()
计算此组合名称的哈希码。该哈希码是此组合名称“规范化”形式的各个组件的哈希码总和。每个组件都在计算其哈希码之前根据组合名称的语法被“规范化”。例如,对于不区分大小写的名称,大写形式的名称与小写形式的等效名称拥有相同的哈希码。

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

clone

public Object clone()
创建此组合名称的副本。对此组合名称的组件进行的更改不会影响新副本,反之亦然。该副本和此组合名称共享相同的语法。

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

compareTo

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

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

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

组合名称的排序取决于组合名称的语法。默认情况下,它们遵从字符串比较的字典规则,并将此扩展到应用于组合名称中的所有组件,各个组件的比较受 jndi.syntax.ignorecase 和 jndi.syntax.trimblanks 属性的影响,受影响的方式与这些属性影响 equals() 的方式相同。如果此组合名称“按字典顺序”小于 obj,则返回一个负数。如果此组合名称“按字典顺序”大于 obj,则返回一个正数。

实现注意事项:当前,在检查顺序时不比较两个组合名称语法属性的相等性。这有可能在以后实现。

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

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 处的组件。
抛出:
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。

实现注意事项:当前,在进行比较时不使用 n 的语法属性。这有可能在以后实现。

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

endsWith

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

实现注意事项:当前,在进行比较时不使用 n 的语法属性。这有可能在以后实现。

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

addAll

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

实现注意事项:当前,不使用或检查 suffix 的语法属性。这有可能在以后实现。

指定者:
接口 Name 中的 addAll
参数:
suffix - 要添加的非 null 组件。
返回:
已更新的 CompoundName,而不是一个新的 CompoundName。不能为 null。
抛出:
InvalidNameException - 如果 suffix 不是一个组合名称,或者添加组件违反此组合名称的语法(例如,组件数超出)。

addAll

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

实现注意事项:当前,不使用或检查 suffix 的语法属性。这有可能在以后实现。

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

add

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

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

add

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

指定者:
接口 Name 中的 add
参数:
comp - 要添加的非 null 组件。
posn - 在其所在位置处添加新组件的索引。该索引必须在范围 [0,size()] 内。
返回:
已更新的 CompoundName,而不是一个新的 CompoundName。不能为 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 - 如果删除组件违反该组合名称的语法。

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策