- java.lang.Object
-
- javax.naming.CompoundName
-
- All Implemented Interfaces:
-
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”)。 如果未指定,默认为“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”表示修饰名称组件中的任何前导和尾随空格以进行比较。 如果它的值不是“true”,或者如果该属性不存在,则空格是显着的。
- jndi.syntax.separator.ava
- 如果存在,指定在指定多个属性/值对时分隔属性值 - 断言的字符串。 (例如“,”,年龄= 65岁,性别=男性)。
- jndi.syntax.separator.typeval
- 如果存在,指定将属性与值分离的字符串(例如“=”在“age = 65”)
- 在没有引号或转义的字符串中,分隔符的任何实例分隔了两个原子名称。 每个原子名被称为组件 。
- 一个分隔符,引用或转义如果在转义之后立即(在左侧)被转义。
- 如果有两套报价,则特定的开始报价必须与其对应的报价相匹配。
- 在组件之前的未转义的开始报价必须在组件末尾的非转义的结束引号进行匹配。 这样引用的组件被称为引用的组件 。 通过删除正面和末尾引用,并将居间的字符视为普通字符进行解析,除非下面列出的涉及引用组件的规则适用。
- 嵌入在非引用组件中的引用被视为普通字符串,不需要匹配。
- 转义或出现在非转义引号之间的分隔符被视为普通字符串而不是分隔符。
- 引用的组件中的转义字符串仅当后跟相应的结束引用字符串时才起到转义的作用。 这可以用于将转义的报价嵌入到引用的组件中。
- 转义的转义字符串不会被视为转义字符串。
- 不在元字符串(引号或分隔符)之前并且不在组件末尾的转义字符串被视为普通字符串。
- 前导分隔符(复合名称字符串以分隔符开头)表示前导空原子组件(由空字符串组成)。 尾部分隔符(复合名称字符串以分隔符结尾)表示尾随的空原子分量。 相邻的分隔符表示空原子分量。
复合名称的字符串形式遵循上述语法。 当化合物名称的组成部分变成其字符串表示形式时,应用上述保留的语法规则(例如,嵌入式分隔符被转义或引用),以便当相同的字符串被解析时,它将产生原始化合物的相同组件名称。
多线程访问
CompoundName
实例与并发多线程访问不同步。 尝试访问和修改CompoundName
多个线程应锁定该对象。- 从以下版本开始:
- 1.3
- 另请参见:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field 描述 protected Properties
mySyntax
此化合物名称的语法属性。
-
构造方法摘要
构造方法 Modifier Constructor 描述 CompoundName(String n, Properties syntax)
通过使用提供的语法属性指定的语法解析字符串n来构造新的化合物名称实例。protected
CompoundName(Enumeration<String> comps, Properties syntax)
使用comps和syntax中指定的组件构造一个新的复合名称实例。
-
方法摘要
所有方法 接口方法 具体的方法 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)
将此CompoundName与指定的对象进行比较以进行订购。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()
使用复合名称的语法规则生成此化合物名称的字符串表示形式。
-
-
-
字段详细信息
-
mySyntax
protected transient Properties mySyntax
此化合物名称的语法属性。 该字段由构造函数初始化,不能为空。 它应该被视为一个只读变量的子类。 对mySyntax的任何必要的更改都应该在构造函数中进行,而不是化合物名称被实例化之后。
-
-
构造方法详细信息
-
CompoundName
protected CompoundName(Enumeration<String> comps, Properties syntax)
使用comps和syntax中指定的组件构造一个新的复合名称实例。 当它被覆盖诸如clone(),getPrefix(),getSuffix()之类的方法时,这个受保护的方法意图被CompoundName的子类使用。- 参数
-
comps
- 要添加的组件的非空枚举。 枚举的每个元素都是String类。 枚举将用于提取其元素。 -
syntax
- 指定此化合物名称的语法的非空属性。 请参阅属性内容的类描述。
-
CompoundName
public CompoundName(String n, Properties syntax) throws InvalidNameException
通过使用提供的语法属性指定的语法解析字符串n来构造新的化合物名称实例。- 参数
-
n
- 要解析的非空字符串。 -
syntax
- 指定此化合物名称语法的属性的非空列表。 请参阅属性内容的类描述。 - 异常
-
InvalidNameException
- 如果'n'违反syntax
指定的语法。
-
-
方法详细信息
-
toString
public String toString()
使用复合名称的语法规则生成此化合物名称的字符串表示形式。 语法规则在类描述中描述。 一个空的组件由一个空字符串表示。 如此生成的字符串表示可以传递给具有相同语法属性的CompoundName构造函数,以创建新的等效化合物名称。
-
equals
public boolean equals(Object obj)
确定obj是否在语法上等于此化合物名称。 如果obj为null或不是CompoundName,则返回false。 如果一个中的每个组件与另一个中的相应组件“相等”,则两个组合名称相等。平等也是根据这个化合物名称的语法来定义的。 当比较两个组件相等时,CompoundName的默认实现使用语法属性jndi.syntax.ignorecase和jndi.syntax.trimblanks。 如果忽略大小写,则具有相同字符序列但具有不同情况的两个字符串被认为是相等的。 如果正在修剪空白,则为了比较的目的,忽略前导和尾随空格。
两个组合名称必须具有相同数量的组件。
实现注意:目前,两个复合名称的语法属性不相等。 他们可能在未来。
- 重写:
-
equals
在Object
- 参数
-
obj
- 可能要比较的空对象。 - 结果
- 如果obj等于此复合名称,则为true,否则为false。
- 另请参见:
-
compareTo(java.lang.Object obj)
-
hashCode
public int hashCode()
计算此化合物名称的哈希码。 哈希代码是该化合物名称的各个组分的“规范化”形式的哈希码的总和。 在组合名称的语法计算其哈希码之前,每个组件都按照“规范化”。 对于不区分大小写的名称,例如,名称的大写形式具有与其较低等同物相同的哈希码。- 重写:
-
hashCode
在Object
- 结果
- 表示此名称的哈希码的int。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
clone
public Object clone()
创建此复合名称的副本。 对该复合名称的组件的更改不会影响新副本,反之亦然。 克隆和此复合名称共享相同的语法。
-
compareTo
public int compareTo(Object obj)
将此CompoundName与指定的对象进行比较以进行订购。 返回一个负整数,零或正整数,因为该名称小于,等于或大于给定的对象。如果obj为null或者不是CompoundName的实例,则抛出ClassCastException。
请参阅equals()表示两个复合名称相等的含义。 如果两个复合名称相等,则返回0。
复合名称的排序取决于复合名称的语法。 默认情况下,它们遵循用于字符串比较的字典规则,其扩展名适用于复合名称中的所有组件,并且各个组件的比较受jndi.syntax.ignorecase和jndi.syntax.trimblanks属性的影响,与它们影响equals()。 如果此复合名称比词汇“词典”小,则返回一个负数。 如果这个复合名称比词典“字典”大,则返回正数。
实现注意:当检查顺序时,两个复合名称的语法属性不进行比较。 他们可能在未来。
- Specified by:
-
compareTo
在接口Comparable<Object>
- Specified by:
-
compareTo
在接口Name
- 参数
-
obj
- 要比较的非空对象。 - 结果
- 负整数,零或正整数,因为该名称小于,等于或大于给定的对象。
- 异常
-
ClassCastException
- 如果obj不是CompoundName。 - 另请参见:
-
equals(java.lang.Object)
-
isEmpty
public boolean isEmpty()
确定此化合物名称是否为空。 如果复合名称具有零组件,则为空。
-
getAll
public Enumeration<String> getAll()
检索此复合名称的组件作为字符串的枚举。 在此枚举上更新此化合物名称的效果未定义。
-
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。实现注意:当进行比较时,目前不使用n的语法属性。 他们可能在未来。
- Specified by:
-
startsWith
在接口Name
- 参数
-
n
- 要检查的可能为null的复合名称。 - 结果
- 如果n是CompoundName并且是此复合名称的前缀,则为true,否则为false。
-
endsWith
public boolean endsWith(Name n)
确定复合名称是否是此化合物名称的后缀。 复合名称'n'是后缀,如果它等于getSuffix(size() - n.size()) - 换句话说,该复合名称以“n”结尾。 如果n为空,则返回false。实现注意:当进行比较时,目前不使用n的语法属性。 他们可能在未来。
-
addAll
public Name addAll(Name suffix) throws InvalidNameException
将复合名称的组件按顺序添加到该化合物名称的末尾。实现注意:目前未使用或检查后缀的语法属性。 他们可能在未来。
- Specified by:
-
addAll
在接口Name
- 参数
-
suffix
- 要添加的非零组件。 - 结果
- 更新的CompoundName,而不是一个新的。 不能为空。
- 异常
-
InvalidNameException
- 如果后缀不是复合名称,或者添加组件违反了此化合物名称的语法(例如超过组件数量)。
-
addAll
public Name addAll(int posn, Name n) throws InvalidNameException
在此复合名称中的指定位置添加化合物名称的组成部分。 在第一个新组件的索引之前或之后,此化合物名称的组件向上移动(远离索引0)以适应新组件。实现注意:目前未使用或检查后缀的语法属性。 他们可能在未来。
- Specified by:
-
addAll
在接口Name
- 参数
-
n
- 要添加的非零组件。 -
posn
- 在此名称中添加新组件的索引。 必须在[0,size()]范围内。 - 结果
- 更新的CompoundName,而不是一个新的。 不能为空。
- 异常
-
ArrayIndexOutOfBoundsException
- 如果posn在指定范围之外。 -
InvalidNameException
- 如果n不是复合名称,或者添加组件违反了此化合物名称的语法(例如超过组件数量)。
-
add
public Name add(String comp) throws InvalidNameException
将单个组件添加到此化合物名称的末尾。- Specified by:
-
add
在接口Name
- 参数
-
comp
- 要添加的非零组件。 - 结果
- 更新的CompoundName,而不是一个新的。 不能为空。
- 异常
-
InvalidNameException
- 如果在名称末尾添加comp将违反化合物名称的语法。
-
add
public Name add(int posn, String comp) throws InvalidNameException
在此化合物名称中的指定位置添加单个组件。 新组件的索引之后或之后的此化合物名称的组件向上移动一(远离索引0)以适应新组件。- Specified by:
-
add
在接口Name
- 参数
-
comp
- 要添加的非空组件。 -
posn
- 添加新组件的索引。 必须在[0,size()]范围内。 - 结果
- 更新的CompoundName,而不是一个新的。 不能为空。
- 异常
-
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
- 如果删除组件将违反化合物名称的语法。
-
-