JavaTM 2 Platform
Standard Ed. 6

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.NameImpl impl
          此組合名稱的實作。
protected  Properties mySyntax
          此組合名稱的語法屬性。
 
建構子摘要
protected CompoundName(Enumeration<String> comps, Properties syntax)
          使用 comps 和 syntax 指定的元件建構一個新的組合名稱實例。
  CompoundName(String n, Properties syntax)
          通過解析使用提供的 syntax 屬性所指定的語法的字元串 n 來建構一個新的組合名稱實例。
 
方法摘要
 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 與指定 Object 的順序。
 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()
          使用組合名稱的語法規則產生此組合名稱的字元串表示形式。
 
從類別 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

compareTo

public int compareTo(Object obj)
比較此 CompoundName 與指定 Object 的順序。根據此 Name 小於、等於還是大於指定 Object 分別返回負整數、零或正整數。

如果 obj 為 null 或者不是一個 CompoundName 實例,則拋出 ClassCastException。

關於這對兩個組合名稱相等性的意義,請參見 equals()。如果兩個組合名稱是相等的,則返回 0。

組合名稱的排序取決於組合名稱的語法。預設情況下,它們遵從字元串比較的字典規則,並將此擴展到應用於組合名稱中的所有元件,各個元件的比較受 jndi.syntax.ignorecase 和 jndi.syntax.trimblanks 屬性的影響,受影響的方式與這些屬性影響 equals() 的方式相同。如果此組合名稱“按字典順序”小於 obj,則返回一個負數。如果此組合名稱“按字典順序”大於 obj,則返回一個正數。

實作注意事項:當前,在檢查順序時不比較兩個組合名稱語法屬性的相等性。這有可能在以後實作。

指定者:
介面 Comparable<Object> 中的 compareTo
指定者:
介面 Name 中的 compareTo
參數:
obj - 要與之比較的非 null 物件。
返回:
根據此 Name 小於、等於還是大於指定 Object 分別返回負整數、零或正整數。
拋出:
ClassCastException - 如果 obj 不是一個 CompoundName。
另請參見:
equals(java.lang.Object)

size

public int size()
檢索此組合名稱中的元件數。

指定者:
介面 Name 中的 size
返回:
此組合名稱中的非負元件數。

isEmpty

public boolean isEmpty()
確定此組合名稱是否為空。如何組合名稱沒有任何元件,則該名稱為空。

指定者:
介面 Name 中的 isEmpty
返回:
如果此組合名稱為空,則返回 true,否則返回 false。

getAll

public Enumeration<String> getAll()
以字元串列舉的形式檢索此組合名稱的元件。在此列舉上更新此組合名稱的結果是不確定的。

指定者:
介面 Name 中的 getAll
返回:
此組合名稱元件的非 null 列舉。每個列舉元素都屬於 String 類別。

get

public String get(int posn)
檢索此組合名稱的元件。

指定者:
介面 Name 中的 get
參數:
posn - 要檢索的從 0 開始的元件索引。該索引必須在範圍 [0,size()) 內。
返回:
位於索引 posn 處的元件。
拋出:
ArrayIndexOutOfBoundsException - 如果 posn 超出指定範圍。

getPrefix

public Name getPrefix(int posn)
創建一個組合名稱,其元件由此組合名稱中元件的前綴組成。該結果和此組合名稱共享相同的語法。對此組合名稱進行的後續更改不會影響返回的名稱,反之亦然。

指定者:
介面 Name 中的 getPrefix
參數:
posn - 從 0 開始的元件索引,在該索引處停止。該索引必須在範圍 [0,size()] 內。
返回:
由索引範圍在 [0,posn) 之間的元件組成的組合名稱。
拋出:
ArrayIndexOutOfBoundsException - 如果 posn 超出指定範圍。

getSuffix

public Name getSuffix(int posn)
創建一個組合名稱,其元件由該組合名稱中元件的後綴組成。該結果和此組合名稱共享相同的語法。對此組合名稱進行的後續更改不會影響返回的名稱。

指定者:
介面 Name 中的 getSuffix
參數:
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 的語法屬性。這有可能在以後實作。

指定者:
介面 Name 中的 startsWith
參數:
n - 要檢查的可能為 null 的組合名稱。
返回:
如果 n 是一個 CompoundName 並且是此組合名稱的前綴,則返回 true,否則返回 false。

endsWith

public boolean endsWith(Name n)
確定某一組合名稱是否是此組合名稱的後綴。如果某一組合名稱 'n' 等於 getSuffix(size()-n.size()),則該名稱是一個後綴,換句話說,此組合名稱以 'n' 結尾。如果 n 為 null 或者不是一個組合名稱,則返回 false。

實作注意事項:當前,在進行比較時不使用 n 的語法屬性。這有可能在以後實作。

指定者:
介面 Name 中的 endsWith
參數:
n - 要檢查的可能為 null 的組合名稱。
返回:
如果 n 是一個 CompoundName 並且是此組合名稱的後綴,則返回 true,否則返回 false。

addAll

public Name addAll(Name suffix)
            throws InvalidNameException
按順序將組合名稱的元件添加到此組合名稱的末尾。

實作注意事項:當前,不使用或檢查 suffix 的語法屬性。這有可能在以後實作。

指定者:
介面 Name 中的 addAll
參數:
suffix - 要添加的非 null 元件。
返回:
已更新的 CompoundName,而不是一個新的 CompoundName。不能為 null。
拋出:
InvalidNameException - 如果 suffix 不是一個組合名稱,或者添加元件違反此組合名稱的語法(例如,元件數超出)。

addAll

public Name addAll(int posn,
                   Name n)
            throws InvalidNameException
按順序將組合名稱的元件添加到此組合名稱中的指定位置。此組合名稱位於第一個新元件的索引處或這之後的元件被上移(遠離索引 0),以容納新元件。

實作注意事項:當前,不使用或檢查 suffix 的語法屬性。這有可能在以後實作。

指定者:
介面 Name 中的 addAll
參數:
n - 要添加的非 null 元件。
posn - 此名稱中的索引,將在該索引處添加新元件。該索引必須在範圍 [0,size()] 內。
返回:
已更新的 CompoundName,而不是一個新的 CompoundName。不能為 null。
拋出:
ArrayIndexOutOfBoundsException - 如果 posn 超出指定範圍。
InvalidNameException - 如果 n 不是一個組合名稱,或者添加元件違反此組合名稱的語法(例如,元件數超出)。

add

public Name add(String comp)
         throws InvalidNameException
將單個元件添加到此組合名稱的末尾。

指定者:
介面 Name 中的 add
參數:
comp - 要添加的非 null 元件。
返回:
已更新的 CompoundName,而不是一個新的 CompoundName。不能為 null。
拋出:
InvalidNameException - 如果在該名稱末尾添加 comp 違反該組合名稱的語法。

add

public Name add(int posn,
                String comp)
         throws InvalidNameException
在此組合名稱中的指定位置添加單個元件。此組合名稱位於新元件的索引處或這之後的元件被上移(遠離索引 0)一位,以容納新元件。

指定者:
介面 Name 中的 add
參數:
comp - 要添加的非 null 元件。
posn - 在其所在位置處添加新元件的索引。該索引必須在範圍 [0,size()] 內。
返回:
已更新的 CompoundName,而不是一個新的 CompoundName。不能為 null。
拋出:
ArrayIndexOutOfBoundsException - 如果 posn 超出指定範圍。
InvalidNameException - 如果在指定位置添加 comp 違反該組合名稱的語法。

remove

public Object remove(int posn)
              throws InvalidNameException
從此組合名稱中刪除一個元件。移除此組合名稱位置 'posn' 處的元件,而位於大於 'posn' 索引處的元件都將下移(朝著索引 0)一位。

指定者:
介面 Name 中的 remove
參數:
posn - 要刪除的元件的索引。該索引必須在範圍 [0,size()) 內。
返回:
移除的元件(一個 String)。
拋出:
ArrayIndexOutOfBoundsException - 如果 posn 超出指定範圍(包括組合名稱為空的情況)。
InvalidNameException - 如果刪除元件違反該組合名稱的語法。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only