Module java.naming
Package javax.naming

Class CompositeName

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)的示例
字符串名称 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

    Constructors
    Modifier
    Constructor
    Description
     
    构造一个新的空复合名称。
     
    通过使用复合名称语法(从左到右,斜杠分隔)解析字符串n来构造一个新的复合名称实例。
    protected
    使用由'comps'指定的组件构造一个新的复合名称实例。
  • Method Summary

    Modifier and Type
    Method
    Description
    add(int posn, String comp)
    在此复合名称中的指定位置添加单个组件。
    add(String comp)
    在此复合名称末尾添加单个组件。
    addAll(int posn, Name n)
    按顺序在此复合名称的指定位置添加复合名称的组件。
    addAll(Name suffix)
    按顺序在此复合名称末尾添加复合名称的组件。
    clone()
    生成此复合名称的副本。
    int
    将此CompositeName与指定的Object进行比较以确定顺序。
    boolean
    确定复合名称是否为此复合名称的后缀。
    boolean
    equals(Object obj)
    确定两个复合名称是否相等。
    get(int posn)
    检索此复合名称的组件。
    getAll()
    将此复合名称的组件作为字符串枚举检索。
    getPrefix(int posn)
    创建一个复合名称,其组件由此复合名称中的组件前缀组成。
    getSuffix(int posn)
    创建一个复合名称,其组件由此复合名称中的组件后缀组成。
    int
    计算此复合名称的哈希码。
    boolean
    确定此复合名称是否为空。
    remove(int posn)
    从此复合名称中删除一个组件。
    int
    size()
    检索此复合名称中的组件数。
    boolean
    确定复合名称是否为此复合名称的前缀。
    生成此复合名称的字符串表示形式。

    Methods declared in class java.lang.Object

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • CompositeName

      protected CompositeName(Enumeration<String> comps)
      使用由'comps'指定的组件构造一个新的复合名称实例。此受保护方法旨在由CompositeName的子类在覆盖诸如clone()、getPrefix()、getSuffix()等方法时使用。
      参数:
      comps - 包含新复合名称的组件的非空枚举。每个元素都是String类。将使用该枚举来提取其元素。
    • CompositeName

      public CompositeName(String n) throws InvalidNameException
      通过使用复合名称语法(从左到右,斜杠分隔)解析字符串n来构造一个新的复合名称实例。复合名称语法在类描述中有详细描述。
      参数:
      n - 要解析的非空字符串。
      抛出:
      InvalidNameException - 如果n具有无效的复合名称语法。
    • CompositeName

      public CompositeName()
      构造一个新的空复合名称。当对其调用isEmpty()时,这样的名称将返回true。
  • Method Details

    • toString

      public String toString()
      生成此复合名称的字符串表示形式。字符串表示形式包括按顺序枚举复合名称的每个组件,并使用正斜杠字符分隔每个组件。根据JNDI语法,必要时应用引号和转义字符,该语法在类描述中有详细描述。空组件由空字符串表示。因此生成的字符串表示形式可以传递给CompositeName构造函数,以创建一个新的等效复合名称。
      覆盖:
      toString 在类 Object
      返回:
      此复合名称的非空字符串表示形式。
    • equals

      public boolean equals(Object obj)
      确定两个复合名称是否相等。如果obj为null或不是复合名称,则返回false。如果一个复合名称中的每个组件等于另一个复合名称中的相应组件,则两个复合名称相等。这意味着两者具有相同数量的组件,并且每个组件的equals()测试与另一个名称中的相应组件返回true。
      覆盖:
      equals 在类 Object
      参数:
      obj - 要与之比较的可能为null的对象。
      返回:
      如果obj等于此复合名称,则返回true;否则返回false。
      参见:
    • hashCode

      public int hashCode()
      计算此复合名称的哈希码。哈希码是此复合名称各个组件的哈希码之和。
      覆盖:
      hashCode 在类 Object
      返回:
      表示此名称的哈希码的int值。
      参见:
    • compareTo

      public int compareTo(Object obj)
      将此CompositeName与指定的对象进行比较以确定顺序。如果此名称小于、等于或大于给定对象,则返回负整数、零或正整数。

      如果obj为null或不是CompositeName的实例,则会抛出ClassCastException异常。

      请参阅equals()以了解两个复合名称何时相等。如果两个复合名称相等,则返回0。

      复合名称的排序遵循字符串比较的词典规则,其中所有组件都适用。效果就好像所有组件都按照指定的顺序排列,并且词典规则应用于这两个排列。如果此复合名称在“词典上”小于obj,则返回负数。如果此复合名称在“词典上”大于obj,则返回正数。

      指定者:
      compareTo 在接口 Comparable<Object>
      指定者:
      compareTo 在接口 Name
      参数:
      obj - 要与之比较的非null对象。
      返回:
      负整数、零或正整数,表示此名称小于、等于或大于给定对象。
      抛出:
      ClassCastException - 如果obj不是CompositeName。
      另请参阅:
    • clone

      public Object clone()
      生成此复合名称的副本。对此复合名称的组件进行更改不会影响新副本,反之亦然。
      指定者:
      clone 在接口 Name
      覆盖:
      clone 在类 Object
      返回:
      此复合名称的非null副本。
      另请参阅:
    • size

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

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

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

      public String get(int posn)
      检索此复合名称的一个组件。
      指定者:
      get 在接口 Name
      参数:
      posn - 要检索的组件的基于0的索引。必须在范围[0,size())内。
      返回:
      索引posn处的非null组件。
      抛出:
      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'是前缀。如果'n'为null或不是复合名称,则返回false。
      指定者:
      startsWith 在接口 Name
      参数:
      n - 要检查的可能为null的名称。
      返回:
      如果n是CompositeName并且是此复合名称的前缀,则为true;否则为false。
    • endsWith

      public boolean endsWith(Name n)
      确定一个复合名称是否是此复合名称的后缀。如果复合名称'n'等于getSuffix(size()-n.size()),换句话说,此复合名称以'n'结尾,则复合名称'n'是后缀。如果'n'为null或不是复合名称,则返回false。
      指定者:
      endsWith 在接口 Name
      参数:
      n - 要检查的可能为null的名称。
      返回:
      如果n是CompositeName并且是此复合名称的后缀,则为true;否则为false。
    • addAll

      public Name addAll(Name suffix) throws InvalidNameException
      将一个复合名称的组件按顺序添加到此复合名称的末尾。
      指定者:
      addAll 在接口 Name
      参数:
      suffix - 要添加的非null组件。
      返回:
      更新后的CompositeName,而不是新的。不能为null。
      抛出:
      InvalidNameException - 如果suffix不是复合名称。
    • addAll

      public Name addAll(int posn, Name n) throws InvalidNameException
      将一个复合名称的组件按顺序添加到此复合名称中的指定位置。此复合名称中的索引大于或等于第一个新组件的索引的组件向上移动(远离索引0)以容纳新组件。
      指定者:
      addAll 在接口 Name
      参数:
      posn - 要添加新组件的此名称中的索引。必须在范围[0,size()]内。
      n - 要添加的非null组件。
      返回:
      更新后的CompositeName,而不是新的。不能为null。
      抛出:
      InvalidNameException - 如果n不是复合名称。
      ArrayIndexOutOfBoundsException - 如果posn超出指定范围。
    • add

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

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

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