Module  java.naming
软件包  javax.naming

Class CompositeName

  • All Implemented Interfaces:
    SerializableCloneableComparable<Object>Name


    public class CompositeName
    extends Object
    implements Name
    此类表示组合名称 - 跨多个命名空间的组件名称序列。 每个组件是命名系统的命名空间中的字符串名称。 如果组件来自分层命名空间,则可以使用CompoundName类将该组件进一步解析为其原子部分。

    组合名称的组件被编号。 具有N个组件的组合名称的索引范围从0到但不包括N。该范围可以写为[0,N]。 最重要的组件是索引0.空复合名称没有组件。

    JNDI复合名称语法

    JNDI定义了复合名称的标准字符串表示形式。 该表示形式是使用组件分隔符(一个正斜杠字符(/))将组合名称的组件从左到右连接在一起,以分隔每个组件。 JNDI语法定义了以下元字符:
    • 逃避(反斜杠\),
    • 报价字符(单(')和双引号(“))和
    • 组件分隔符(正斜杠字符(/))。
    前导引号,任何元字符之前的转义,组件结尾处的转义,或未引用组件中的组件分隔符必须在该组件被组合成复合名称字符串的前面带有转义字符。 或者,为避免添加如所述的转义字符,可以使用匹配的单引号或匹配的双引号来引用整个组件。 在双引号组件中出现的单引号不被视为元字符(并且不需要转义),反之亦然。

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

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

    复合名称示例

    该表显示了一些复合名称的示例。 每行显示一个复合名称的字符串形式及其相应的结构形式( CompositeName )。 examples showing string form of composite name and its corresponding structural form (CompositeName) String Name 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 s。 请注意,组合两个复合名称的字符串形式只需要将其字符串形式连接在一起。 composition examples showing string names and composite names String Names 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
    另请参见:
    Serialized Form
    • 构造方法摘要

      构造方法  
      Modifier Constructor 描述
        CompositeName​()
      构造一个新的空复合名称。
        CompositeName​(String n)
      通过使用复合名称语法(从左到右,斜杠分隔)解析字符串n来构造新的复合名称实例。
      protected CompositeName​(Enumeration<String> comps)
      使用“comps”指定的组件构造新的组合名称实例。
    • 方法摘要

      所有方法  接口方法  具体的方法 
      Modifier and Type 方法 描述
      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与指定的对象进行比较。
      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​()
      生成此复合名称的字符串表示形式。
    • 构造方法详细信息

      • CompositeName

        protected CompositeName​(Enumeration<String> comps)
        使用“comps”指定的组件构造新的组合名称实例。 当它被覆盖诸如clone(),getPrefix(),getSuffix()等方法时,这个protected方法是由CompositeName的子类使用的。
        参数
        comps - 包含新组合名称的组件的非空枚举。 每个元素都是String类。 枚举将用于提取其元素。
      • CompositeName

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

        public CompositeName​()
        构造一个新的空复合名称。 这样一个名称在isEmpty()被调用时返回true。
    • 方法详细信息

      • toString

        public String toString​()
        生成此复合名称的字符串表示形式。 字符串表示包括按顺序对复合名称的每个组件进行枚举,并用正斜杠字符分隔每个组件。 引用和转义字符在必要时根据类描述中描述的JNDI语法进行应用。 一个空的组件由一个空字符串表示。 这样生成的字符串表示可以传递给CompositeName构造函数,以创建一个新的等效组合名称。
        重写:
        toStringObject
        结果
        此复合名称的非空字符串表示形式。
      • equals

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

        public int hashCode​()
        计算此复合名称的哈希码。 哈希码是此复合名称的各个组件的哈希码的总和。
        重写:
        hashCodeObject
        结果
        表示此名称的哈希码的int。
        另请参见:
        equals(java.lang.Object)
      • compareTo

        public int compareTo​(Object obj)
        将此CompositeName与指定的对象进行比较。 返回一个负整数,零或正整数,因为该名称小于,等于或大于给定的对象。

        如果obj为null或CompositeName的实例,则抛出ClassCastException。

        对于两个复合名称相同,这意味着equals()。 如果两个复合名称相等,则返回0。

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

        Specified by:
        compareTo在接口 Comparable<Object>
        Specified by:
        compareTo在接口 Name
        参数
        obj - 要比较的非空对象。
        结果
        负整数,零或正整数,因为该名称小于,等于或大于给定的对象。
        异常
        ClassCastException - 如果obj不是CompositeName。
        另请参见:
        Comparable.compareTo(Object)
      • clone

        public Object clone​()
        生成此复合名称的副本。 对此组合名称的组件的更改不会影响新副本,反之亦然。
        Specified by:
        clone在接口 Name
        重写:
        cloneObject
        结果
        此复合名称的非空拷贝。
        另请参见:
        Cloneable
      • size

        public int size​()
        检索此组合名称中的组件数。
        Specified by:
        size在接口 Name
        结果
        该复合名称中的非负数组件。
      • isEmpty

        public boolean isEmpty​()
        确定此复合名称是否为空。 如果组合名称具有零组件,则为空。
        Specified by:
        isEmpty在接口 Name
        结果
        如果此复合名称为空,则为true,否则为false。
      • getAll

        public Enumeration<String> getAll​()
        检索此复合名称的组件作为字符串的枚举。 此枚举上的此组合名称的更新效果未定义。
        Specified by:
        getAll在接口 Name
        结果
        此复合名称的组件的非空枚举。 枚举的每个元素都是String类。
      • get

        public String get​(int posn)
        检索此复合名称的组件。
        Specified by:
        get在接口 Name
        参数
        posn - 要检索的组件的基于0的索引。 必须在[0,size())范围内。
        结果
        索引posn处的非空组件。
        异常
        ArrayIndexOutOfBoundsException - 如果posn在指定范围之外。
      • getPrefix

        public Name getPrefix​(int posn)
        创建一个组合名称,其组件由此组合名称中组件的前缀组成。 此复合名称的后续更改不会影响返回的名称。
        Specified by:
        getPrefix在接口 Name
        参数
        posn - 要停止的组件的基于0的索引。 必须在[0,size()]范围内。
        结果
        由[0,posn]范围内的索引组成的组合名称。
        异常
        ArrayIndexOutOfBoundsException - 如果posn在指定范围之外。
      • getSuffix

        public Name getSuffix​(int posn)
        创建一个组合名称,其组件由此组合名称中的组件的后缀组成。 此复合名称的后续更改不会影响返回的名称。
        Specified by:
        getSuffix在接口 Name
        参数
        posn - 要开始的组件的基于0的索引。 必须在[0,size()]范围内。
        结果
        由[posn,size())范围内的索引组成的组合名称。 如果posn等于size(),则返回一个空的复合名称。
        异常
        ArrayIndexOutOfBoundsException - 如果posn在指定范围之外。
      • startsWith

        public boolean startsWith​(Name n)
        确定复合名称是否是此复合名称的前缀。 复合名称“n”如果等于getPrefix(n.size()),则为前缀 - 换句话说,此复合名称以'n'开头。 如果'n'为空或不是复合名称,则返回false。
        Specified by:
        startsWith在接口 Name
        参数
        n - 可能要查询的null名称。
        结果
        如果n是CompositeName,并且是此复合名称的前缀,则为true,否则为false。
      • endsWith

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

        public Name addAll​(Name suffix)
                    throws InvalidNameException
        将组合名称的组件按顺序添加到此组合名称的末尾。
        Specified by:
        addAll在接口 Name
        参数
        suffix - 要添加的非零组件。
        结果
        更新的CompositeName,而不是一个新的。 不能为空。
        异常
        InvalidNameException - 如果后缀不是组合名称。
      • addAll

        public Name addAll​(int posn,
                           Name n)
                    throws InvalidNameException
        在组合名称中的指定位置添加复合名称的组件。 在第一个新组件的索引之前或之后,此组合名称的组件向上移动(远离索引0)以适应新的组件。
        Specified by:
        addAll在接口 Name
        参数
        n - 要添加的非零组件。
        posn - 添加新组件的名称中的索引。 必须在[0,size()]范围内。
        结果
        更新的CompositeName,而不是一个新的。 不能为空。
        异常
        InvalidNameException - 如果n不是复合名称。
        ArrayIndexOutOfBoundsException - 如果posn在指定范围之外。
      • add

        public Name add​(String comp)
                 throws InvalidNameException
        将单个组件添加到此组合名称的末尾。
        Specified by:
        add在接口 Name
        参数
        comp - 要添加的非零组件。
        结果
        更新的CompositeName,而不是一个新的。 不能为空。
        异常
        InvalidNameException - 如果在名称末尾添加comp将违反名称的语法。
      • add

        public Name add​(int posn,
                        String comp)
                 throws InvalidNameException
        在此复合名称中的指定位置添加单个组件。 在新组件的索引之前或之后,此组合名称的组件向上移动一(远离索引0)以适应新组件。
        Specified by:
        add在接口 Name
        参数
        comp - 要添加的非零组件。
        posn - 添加新组件的索引。 必须在[0,size()]范围内。
        结果
        更新的CompositeName,而不是一个新的。 不能为空。
        异常
        ArrayIndexOutOfBoundsException - 如果posn在指定范围之外。
        InvalidNameException - 如果在指定位置添加comp将违反名称的语法。
      • remove

        public Object remove​(int posn)
                      throws InvalidNameException
        从此复合名称中删除组件。 该复合名称在“posn”位置的组件被删除,而大于“posn”的索引的组件向下移动(朝向索引0)1。
        Specified by:
        remove在接口 Name
        参数
        posn - 要删除的组件的索引。 必须在[0,size())范围内。
        结果
        删除组件(一个String)。
        异常
        ArrayIndexOutOfBoundsException - 如果posn在指定范围之外(包括组合名称为空的情况)。
        InvalidNameException - 如果删除组件将违反名称的语法。