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.NameImplimpl
          此组合名称的实现。
protected  PropertiesmySyntax
          此组合名称的语法属性。
 
构造方法摘要
protected CompoundName(Enumeration<String> comps, Properties syntax)
          使用 comps 和 syntax 指定的组件构造一个新的组合名称实例。
 CompoundName(String n, Properties syntax)
          通过解析使用提供的 syntax 属性所指定的语法的字符串 n 来构造一个新的组合名称实例。
 
方法摘要
 Nameadd(int posn, String comp)
          在此组合名称中的指定位置添加单个组件。
 Nameadd(String comp)
          将单个组件添加到此组合名称的末尾。
 NameaddAll(int posn, Name n)
          按顺序将组合名称的组件添加到此组合名称中的指定位置。
 NameaddAll(Name suffix)
          按顺序将组合名称的组件添加到此组合名称的末尾。
 Objectclone()
          创建此组合名称的副本。
 intcompareTo(Object obj)
          比较此 CompoundName 与指定 Object 的顺序。
 booleanendsWith(Name n)
          确定某一组合名称是否是此组合名称的后缀。
 booleanequals(Object obj)
          确定 obj 在语法上是否等同于此组合名称。
 Stringget(int posn)
          检索此组合名称的组件。
 Enumeration<String>getAll()
          以字符串枚举的形式检索此组合名称的组件。
 NamegetPrefix(int posn)
          创建一个组合名称,其组件由此组合名称中组件的前缀组成。
 NamegetSuffix(int posn)
          创建一个组合名称,其组件由该组合名称中组件的后缀组成。
 inthashCode()
          计算此组合名称的哈希码。
 booleanisEmpty()
          确定此组合名称是否为空。
 Objectremove(int posn)
          从此组合名称中删除一个组件。
 intsize()
          检索此组合名称中的组件数。
 booleanstartsWith(Name n)
          确定某一组合名称是否是此组合名称的前缀。
 StringtoString()
          使用组合名称的语法规则生成此组合名称的字符串表示形式。
 
从类 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