模块 java.naming

类 CompoundName

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

public class CompoundName extends Object implements Name
此类表示复合名称——来自分层名称空间的名称。复合名称中的每个组件都是一个原子名称。

复合名称的组成部分已编号。具有 N 个成分的复合名称的索引范围从 0 到但不包括 N。此范围可以写为 [0,N)。最重要的组件位于索引 0 处。空的复合名称没有组件。

复合名称语法

使用一组属性指定复合名称的语法:
jndi.syntax.direction
解析方向(“right_to_left”、“left_to_right”、“flat”)。如果未指定,则默认为“扁平”,这意味着命名空间是扁平的,没有层次结构。
jndi.syntax.separator
原子名称组件之间的分隔符。除非方向是“平面”,否则是必需的。
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”表示为了比较目的修剪名称组件中的任何前导和尾随空格。如果它的值不是“真”,或者如果该属性不存在,则空白很重要。
jndi.syntax.separator.ava
如果存在,则指定在指定多个属性/值对时分隔属性值断言的字符串。 (例如“,”在年龄=65,性别=男性)。
jndi.syntax.separator.typeval
如果存在,指定将属性与值分开的字符串(例如“age=65”中的“=”)
这些属性根据以下规则进行解释:
  1. 在没有引号或转义符的字符串中,分隔符的任何实例都分隔两个原子名称。每个原子名称都称为 component
  2. 如果转义符紧跟在分隔符、引号或转义符之前(在左侧),则转义符。
  3. 如果有两组引号,则特定的开始引号必须与其相应的结束引号相匹配。
  4. 组件之前的非转义开始引号必须与组件末尾的非转义结束引号匹配。这样引用的组件称为 quoted component 。它通过删除 being- 和 end- 引号,并将中间字符视为普通字符来解析,除非涉及下面列出的引用组件的规则之一适用。
  5. 嵌入在非引号组件中的引号被视为普通字符串,不需要匹配。
  6. 转义或出现在非转义引号之间的分隔符被视为普通字符串而不是分隔符。
  7. 带引号的组件中的转义字符串仅在后跟相应的结束引号字符串时才充当转义符。这可用于在引用的组件中嵌入转义引号。
  8. 转义的转义字符串不被视为转义字符串。
  9. 不在元字符串(引号或分隔符)之前且不在组件末尾的转义字符串被视为普通字符串。
  10. 前导分隔符(复合名称字符串以分隔符开头)表示前导空原子组件(由空字符串组成)。尾随分隔符(复合名称字符串以分隔符结尾)表示尾随空原子组件。相邻的分隔符表示一个空的原子组件。

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

多线程访问

CompoundName 实例未针对并发多线程访问进行同步。尝试访问和修改 CompoundName 的多个线程应该锁定该对象。
自从:
1.3
参见:
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    protected Properties
    此复合名称的语法属性。
  • 构造方法总结

    构造方法
    修饰符
    构造方法
    描述
     
    通过使用提供的语法属性指定的语法解析字符串 n 来构造一个新的复合名称实例。
    protected
    使用 comps 和 syntax 中指定的组件构造一个新的复合名称实例。
  • 方法总结

    修饰符和类型
    方法
    描述
    add(int posn, String comp)
    在此复合名称中的指定位置添加单个组件。
    add(String comp)
    将单个组件添加到该化合物名称的末尾。
    addAll(int posn, Name n)
    在此复合名称中的指定位置按顺序添加复合名称的组件。
    addAll(Name suffix)
    将复合名称的组件按顺序添加到此复合名称的末尾。
    创建此复合名称的副本。
    int
    将此 CompoundName 与指定的 Object 进行比较以进行排序。
    boolean
    确定复合名称是否是该复合名称的后缀。
    boolean
    equals(Object obj)
    确定 obj 在语法上是否等于此复合名称。
    get(int posn)
    检索此复合名称的组件。
    检索此复合名称的组件作为字符串枚举。
    getPrefix(int posn)
    创建一个复合名称,其组件由该复合名称中组件的前缀组成。
    getSuffix(int posn)
    创建一个复合名称,其组件由该复合名称中组件的后缀组成。
    int
    计算此复合名称的哈希码。
    boolean
    确定此复合名称是否为空。
    remove(int posn)
    从此复合名称中删除一个组件。
    int
    size()
    检索此化合物名称中的组件数。
    boolean
    确定复合名称是否是该复合名称的前缀。
    使用复合名称的语法规则生成此复合名称的字符串表示形式。

    在类 java.lang.Object 中声明的方法

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • 字段详细信息

    • mySyntax

      protected transient Properties  mySyntax
      此复合名称的语法属性。该字段由构造方法初始化,不能为空。它应该被子类视为只读变量。对 mySyntax 的任何必要更改都应在构造方法中进行,而不是在实例化复合名称之后进行。
  • 构造方法详细信息

    • CompoundName

      protected CompoundName(Enumeration <String > comps, Properties  syntax)
      使用 comps 和 syntax 中指定的组件构造一个新的复合名称实例。当 CompoundName 的子类重写 clone()、getPrefix()、getSuffix() 等方法时,此受保护的方法将供它们使用。
      参数:
      comps - 要添加的组件的非空枚举。枚举的每个元素都属于 String 类。将使用枚举来提取其元素。
      syntax - 指定此复合名称语法的非空属性。有关属性的内容,请参阅类描述。
    • CompoundName

      public CompoundName(String  n, Properties  syntax) throws InvalidNameException
      通过使用提供的语法属性指定的语法解析字符串 n 来构造一个新的复合名称实例。
      参数:
      n - 要解析的非空字符串。
      syntax - 指定此复合名称语法的非空属性列表。有关属性的内容,请参阅类描述。
      抛出:
      InvalidNameException - 如果“n”违反了 syntax 指定的语法。
  • 方法详情

    • toString

      public String  toString()
      使用复合名称的语法规则生成此复合名称的字符串表示形式。类描述中描述了语法规则。空组件由空字符串表示。这样生成的字符串表示可以传递给具有相同语法属性的 CompoundName 构造方法,以创建新的等效复合名称。
      重写:
      toString 在类 Object
      返回:
      此复合名称的非空字符串表示形式。
    • equals

      public boolean equals(Object  obj)
      确定 obj 在语法上是否等于此复合名称。如果 obj 为 null 或不是 CompoundName,则返回 false。如果一个化合物中的每个成分与另一个化合物中的相应成分“相等”,则两个化合物名称相等。

      相等性也是根据该复合名称的语法定义的。 CompoundName 的默认实现在比较两个组件是否相等时使用语法属性 jndi.syntax.ignorecase 和 jndi.syntax.trimblanks。如果忽略大小写,则认为字符序列相同但大小写不同的两个字符串相等。如果要修剪空白,则出于比较目的,将忽略前导和尾随空白。

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

      实现注意事项:目前不比较两个复合名称的语法属性是否相等。他们可能在未来。

      重写:
      equals 在类 Object
      参数:
      obj - 要比较的可能为空的对象。
      返回:
      如果 obj 等于此复合名称,则为 true,否则为 false。
      参见:
    • hashCode

      public int hashCode()
      计算此复合名称的哈希码。散列码是此复合名称的各个组件的“规范化”形式散列码的总和。在计算哈希码之前,每个组件都根据复合名称的语法进行“规范化”。例如,对于不区分大小写的名称,名称的大写形式与其等效的小写形式具有相同的哈希码。
      重写:
      hashCode 在类 Object
      返回:
      表示此名称的哈希码的 int。
      参见:
    • clone

      public Object  clone()
      创建此复合名称的副本。更改此复合名称的组件不会影响新副本,反之亦然。克隆和这个复合名称共享相同的语法。
      指定者:
      clone 在接口 Name
      重写:
      clone 在类 Object
      返回:
      此复合名称的非空副本。
      参见:
    • compareTo

      public int compareTo(Object  obj)
      将此 CompoundName 与指定的 Object 进行比较以进行排序。返回负整数、零或正整数,因为此名称小于、等于或大于给定的对象。

      如果 obj 为空或不是 CompoundName 的实例,则抛出 ClassCastException。

      有关两个复合名称相等的含义,请参见 equals()。如果两个复合名称相等,则返回 0。

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

      实现注意事项:目前在检查顺序时不比较两个复合名称的语法属性。他们可能在未来。

      指定者:
      compareTo 在接口 Comparable<Object>
      指定者:
      compareTo 在接口 Name
      参数:
      obj - 要比较的非空对象。
      返回:
      负整数、零或正整数,因为此名称小于、等于或大于给定的对象。
      抛出:
      ClassCastException - 如果 obj 不是 CompoundName。
      参见:
    • size

      public int size()
      检索此化合物名称中的组件数。
      指定者:
      size 在接口 Name
      返回:
      此复合名称中组件的非负数。
    • isEmpty

      public boolean isEmpty()
      确定此复合名称是否为空。如果复合名称具有零个组件,则它是空的。
      指定者:
      isEmpty 在接口 Name
      返回:
      如果此复合名称为空,则为 true,否则为 false。
    • getAll

      public Enumeration <String > getAll()
      检索此复合名称的组件作为字符串枚举。更新此化合物名称对此枚举的影响未定义。
      指定者:
      getAll 在接口 Name
      返回:
      此复合名称的组件的非空枚举。枚举的每个元素都属于 String 类。
    • get

      public String  get(int posn)
      检索此复合名称的组件。
      指定者:
      get 在接口 Name
      参数:
      posn - 要检索的组件的基于 0 的索引。必须在 [0,size()) 范围内。
      返回:
      索引位置的组件。
      抛出:
      ArrayIndexOutOfBoundsException - 如果 posn 超出指定范围。
    • getPrefix

      public Name  getPrefix(int posn)
      创建一个复合名称,其组件由该复合名称中组件的前缀组成。结果和这个复合名称共享相同的语法。对该复合名称的后续更改不会影响返回的名称,反之亦然。
      指定者:
      getPrefix 在接口 Name
      参数:
      posn - 停止的组件的从 0 开始的索引。必须在 [0,size()] 范围内。
      返回:
      由 [0,posn) 范围内索引处的组件组成的复合名称。
      抛出:
      ArrayIndexOutOfBoundsException - 如果 posn 超出指定范围。
    • getSuffix

      public Name  getSuffix(int posn)
      创建一个复合名称,其组件由该复合名称中组件的后缀组成。结果和这个复合名称共享相同的语法。对该复合名称的后续更改不会影响返回的名称。
      指定者:
      getSuffix 在接口 Name
      参数:
      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 的语法属性。他们可能在未来。

      指定者:
      startsWith 在接口 Name
      参数:
      n - 要检查的可能为空的复合名称。
      返回:
      如果 n 是 CompoundName 并且是此复合名称的前缀,则为 true,否则为 false。
    • endsWith

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

      实现注意事项:目前在进行比较时不使用 n 的语法属性。他们可能在未来。

      指定者:
      endsWith 在接口 Name
      参数:
      n - 要检查的可能为空的复合名称。
      返回:
      如果 n 是 CompoundName 并且是此复合名称的后缀,则为 true,否则为 false。
    • addAll

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

      实现说明:目前未使用或检查后缀的语法属性。他们可能在未来。

      指定者:
      addAll 在接口 Name
      参数:
      suffix - 要添加的非空组件。
      返回:
      更新的 CompoundName,不是新的。不能为空。
      抛出:
      InvalidNameException - 如果后缀不是复合名称,或者如果组件的添加违反了该复合名称的语法(例如,组件数量超过)。
    • addAll

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

      实现说明:目前未使用或检查后缀的语法属性。他们可能在未来。

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

      public Name  add(String  comp) throws InvalidNameException
      将单个组件添加到该化合物名称的末尾。
      指定者:
      add 在接口 Name
      参数:
      comp - 要添加的非空组件。
      返回:
      更新的 CompoundName,不是新的。不能为空。
      抛出:
      InvalidNameException - 如果在名称末尾添加 comp 会违反复合名称的语法。
    • add

      public Name  add(int posn, String  comp) throws InvalidNameException
      在此复合名称中的指定位置添加单个组件。在新组件的索引处或之后的此复合名称的组件向上移动一位(远离索引 0)以容纳新组件。
      指定者:
      add 在接口 Name
      参数:
      posn - 添加新组件的索引。必须在 [0,size()] 范围内。
      comp - 要添加的非空组件。
      返回:
      更新的 CompoundName,不是新的。不能为空。
      抛出:
      ArrayIndexOutOfBoundsException - 如果 posn 超出指定范围。
      InvalidNameException - 如果在指定位置添加 comp 会违反复合名称的语法。
    • remove

      public Object  remove(int posn) throws InvalidNameException
      从此复合名称中删除一个组件。此复合名称在位置“posn”的组件被删除,索引大于“posn”的组件向下移动(向索引 0)一个。
      指定者:
      remove 在接口 Name
      参数:
      posn - 要删除的组件的索引。必须在 [0,size()) 范围内。
      返回:
      已删除的组件(一个字符串)。
      抛出:
      ArrayIndexOutOfBoundsException - 如果 posn 超出指定范围(包括复合名称为空的情况)。
      InvalidNameException - 如果删除组件会违反复合名称的语法。