|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.util.prefs.Preferences java.util.prefs.AbstractPreferences
public abstract class AbstractPreferences
此類別提供了 Preferences
類別的骨幹實作,從而大大簡化了實作此類別的任務。
此類別僅供 Preferences 實作者使用。Preferences 設施的普通使用者無需參考此文檔。Preferences
文檔已經足夠了。
實作者必須覆寫九個抽象服務提供者介面 (SPI) 方法:getSpi(String)
、putSpi(String,String)
、removeSpi(String)
、childSpi(String)
、removeNodeSpi()
、keysSpi()
、childrenNamesSpi()
、syncSpi()
和 flushSpi()
。所有的具體方法都精確指定它們如何在這些 SPI 方法上實作。如果出於某種考慮(如性能)對預設實作不滿意,則實作者可能決定覆寫一個或多個具體方法。
SPI 方法按異常行為可分為三個組。getSpi 方法應該永遠不拋出異常,但是對性能絲毫不會產生影響,因為 get(String,String)
會攔截此方法所拋出的任何異常,並對調用者返回指定的預設值。removeNodeSpi、keysSpi、childrenNamesSpi、syncSpi 和 flushSpi 方法被指定拋出 BackingStoreException
;如果實作無法執行操作,則需要拋出此經過檢查的異常。該異常向外傳播,導致相應的 API 方法失敗。
其餘的 SPI 方法 putSpi(String,String)
、removeSpi(String)
和 childSpi(String)
具有更加複雜的異常行為。未指定它們拋出 BackingStoreException,因為即使內部存儲不可用,它們通常也遵守其協定。之所以這樣是因為它們不返回任何資訊,並且在進行對 Preferences.flush()
或 Preferences.sync()
的後續調用之前,不要求其結果是持久的。一般而言,這些 SPI 方法不應拋出異常。在某些實作中,可能存在這些調用甚至無法對後續處理的請求操作進行排隊的情形。即使在這些情形下,最好的做法也是忽略該調用並返回,而不是拋出異常。但是,在這些情形下,所有 flush() 和 sync 的後續調用應該返回 false,因為返回 true 意味著以前的所有操作都已成功地成為持久性操作。
有一種情況下 putSpi、removeSpi 和 childSpi 應該 拋出異常:如果調用者在底層作業系統上不具備執行請求操作的足夠權限。例如,如果非特權使用者嘗試修改系統首選項,則在大多數系統上都會發生這種情況。(這要求特權隨實作而變化。在有些實作中,需要修改檔案系統中某些目錄內容的特權;而在另外一些實作中,則需要修改註冊表中某些鍵的內容。)在上述任何情形下,通常讓程序繼續執行並不合乎需要,就好像這些操作在以後會成為持久操作一樣。雖然在這些情形下不要求實作拋出異常,但還是鼓勵這樣做。SecurityException
就是合適的選擇。
大多數 SPI 方法都要求實作在首選項節點上讀取或寫入資訊。實作者需要注意一種情況,即另一個 VM 當前可能已經從內部存儲刪除了此節點。如果該節點已經刪除了,則實作有責任重新創建它。
實作注意事項:在 Sun 的預設 Preferences 實作中,使用者的身份是從底層作業系統繼承的,在虛擬機器的生命週期中不能更改。在伺服器端的 Preferences 實作中,使用者身份可以隨請求而更改,並通過使用靜態 ThreadLocal
實例隱式傳遞給 Preferences 方法。大力 提倡這種實作的設計者在存取首選項時確定使用者(例如,使用 get(String,String)
或 put(String,String)
方法),而不是將使用者與每個 Preferences 實例永久關聯。後一種行為與通常的 Preferences 用法有衝突,將帶來很大的混亂。
Preferences
欄位摘要 | |
---|---|
protected Object |
lock
使用其監視器鎖定此節點的物件。 |
protected boolean |
newNode
如果在創建此物件前內部存儲中不存在此節點,則該欄位為 true。 |
從類別 java.util.prefs.Preferences 繼承的欄位 |
---|
MAX_KEY_LENGTH, MAX_NAME_LENGTH, MAX_VALUE_LENGTH |
建構子摘要 | |
---|---|
protected |
AbstractPreferences(AbstractPreferences parent,
String name)
用指定的父節點和與其父節點相關的指定名稱創建首選項節點。 |
方法摘要 | |
---|---|
String |
absolutePath()
根據 Preferences.absolutePath() 中的規範實作 absolutePath 方法。 |
void |
addNodeChangeListener(NodeChangeListener ncl)
註冊指定偵聽器以接收此節點的節點更改事件。 |
void |
addPreferenceChangeListener(PreferenceChangeListener pcl)
註冊指定偵聽器以接收此首選項節點的首選項更改事件。 |
protected AbstractPreferences[] |
cachedChildren()
返回此節點的所有已知未移除子節點。 |
String[] |
childrenNames()
根據 Preferences.childrenNames() 中的規範實作 children 方法。 |
protected abstract String[] |
childrenNamesSpi()
返回此首選項節點的子節點名稱。 |
protected abstract AbstractPreferences |
childSpi(String name)
返回此首選項節點的指定子節點;如果該子節點尚未存在,則創建它。 |
void |
clear()
根據 Preferences.clear() 中的規範實作 clear 方法。 |
void |
exportNode(OutputStream os)
根據 Preferences.exportNode(OutputStream) 中的規範實作 exportNode 方法。 |
void |
exportSubtree(OutputStream os)
根據 Preferences.exportSubtree(OutputStream) 中的規範實作 exportSubtree 方法。 |
void |
flush()
根據 Preferences.flush() 中的規範實作 flush 方法。 |
protected abstract void |
flushSpi()
此方法是在此節點被鎖定的情況下調用的。 |
String |
get(String key,
String def)
根據 Preferences.get(String,String) 中的規範實作 get 方法。 |
boolean |
getBoolean(String key,
boolean def)
根據 Preferences.getBoolean(String,boolean) 中的規範實作 getBoolean 方法。 |
byte[] |
getByteArray(String key,
byte[] def)
根據 Preferences.getByteArray(String,byte[]) 中的規範實作 getByteArray 方法。 |
protected AbstractPreferences |
getChild(String nodeName)
如果指定的子節點存在,則返回該子節點;如果它不存在,則返回 null。 |
double |
getDouble(String key,
double def)
根據 Preferences.getDouble(String,double) 中的規範實作 getDouble 方法。 |
float |
getFloat(String key,
float def)
根據 Preferences.getFloat(String,float) 中的規範實作 getFloat 方法。 |
int |
getInt(String key,
int def)
根據 Preferences.getInt(String,int) 中的規範實作 getInt 方法。 |
long |
getLong(String key,
long def)
根據 Preferences.getLong(String,long) 中的規範實作 getLong 方法。 |
protected abstract String |
getSpi(String key)
返回與此首選項節點上的指定鍵相關聯的值;如果不存在此鍵的關聯值或此時無法確定該關聯值,則返回 null。 |
protected boolean |
isRemoved()
當且僅當已經使用 removeNode() 方法移除此節點(或其祖先)時才返回 true。 |
boolean |
isUserNode()
根據 Preferences.isUserNode() 中的規範實作 isUserNode 方法。 |
String[] |
keys()
根據 Preferences.keys() 中的規範實作 keys 方法。 |
protected abstract String[] |
keysSpi()
返回在此首選項節點中具有關聯值的所有鍵。 |
String |
name()
根據 Preferences.name() 中的規範實作 name 方法。 |
Preferences |
node(String path)
根據 Preferences.node(String) 中的規範實作 node 方法。 |
boolean |
nodeExists(String path)
根據 Preferences.nodeExists(String) 中的規範實作 nodeExists 方法。 |
Preferences |
parent()
根據 Preferences.parent() 中的規範實作 parent 方法。 |
void |
put(String key,
String value)
根據 Preferences.put(String,String) 中的規範實作 put 方法。 |
void |
putBoolean(String key,
boolean value)
根據 Preferences.putBoolean(String,boolean) 中的規範實作 putBoolean 方法。 |
void |
putByteArray(String key,
byte[] value)
根據 Preferences.putByteArray(String,byte[]) 中的規範實作 putByteArray 方法。 |
void |
putDouble(String key,
double value)
根據 Preferences.putDouble(String,double) 中的規範實作 putDouble 方法。 |
void |
putFloat(String key,
float value)
根據 Preferences.putFloat(String,float) 中的規範實作 putFloat 方法。 |
void |
putInt(String key,
int value)
根據 Preferences.putInt(String,int) 中的規範實作 putInt 方法。 |
void |
putLong(String key,
long value)
根據 Preferences.putLong(String,long) 中的規範實作 putLong 方法。 |
protected abstract void |
putSpi(String key,
String value)
將給定的鍵-值關聯置於此首選項節點中。 |
void |
remove(String key)
根據 Preferences.remove(String) 中的規範實作 remove(String) 方法。 |
void |
removeNode()
根據 Preferences.removeNode() 中的規範實作 removeNode() 方法。 |
void |
removeNodeChangeListener(NodeChangeListener ncl)
移除指定 NodeChangeListener,使其不再接收更改事件。 |
protected abstract void |
removeNodeSpi()
移除此首選項節點,該首選項節點及其所包含的所有首選項都將失效。 |
void |
removePreferenceChangeListener(PreferenceChangeListener pcl)
移除指定首選項更改偵聽器,使其不再接收首選項更改事件。 |
protected abstract void |
removeSpi(String key)
移除此首選項節點上指定鍵的關聯值(如果有)。 |
void |
sync()
根據 Preferences.sync() 中的規範實作 sync 方法。 |
protected abstract void |
syncSpi()
此方法是在此節點被鎖定的情況下調用的。 |
String |
toString()
返回此首選項節點的絕對路徑名稱。 |
從類別 java.util.prefs.Preferences 繼承的方法 |
---|
importPreferences, systemNodeForPackage, systemRoot, userNodeForPackage, userRoot |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
欄位詳細資訊 |
---|
protected boolean newNode
protected final Object lock
建構子詳細資訊 |
---|
protected AbstractPreferences(AbstractPreferences parent, String name)
parent
- 此首選項節點的父節點;如果此首選項是根,則為 null。name
- 此首選項節點相對於其父節點的名稱,如果此首選項是根,則為 ""。
IllegalArgumentException
- 如果 name 套件含一個斜槓 ('/') 或者 parent 為 null 且名稱不是 ""。方法詳細資訊 |
---|
public void put(String key, String value)
Preferences.put(String,String)
中的規範實作 put 方法。
此實作檢查鍵和值是否合法,獲取此首選項節點的鎖定,檢查該節點是否未被移除,調用 putSpi(String,String)
,並且如果存在首選項更改偵聽器,則將由事件指派執行緒所處理的通知事件加入佇列。
Preferences
中的 put
key
- 指定的 value 將要關聯的鍵。value
- 指定的 key 將要關聯的值。
NullPointerException
- 如果 key 或 value 為 null。
IllegalArgumentException
- 如果 key.length() 超過 MAX_KEY_LENGTH,或者 value.length 超過 MAX_VALUE_LENGTH。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。public String get(String key, String def)
Preferences.get(String,String)
中的規範實作 get 方法。
此實作首先檢查 key 是否為 null;如果是,則拋出 NullPointerException。然後,它獲取此首選項節點的鎖,檢查該節點是否未被移除,調用 getSpi(String)
並返回結果,除非 getSpi 調用返回 null 或拋出異常,在這種情況下此調用返回 def。
Preferences
中的 get
key
- 要返回其關聯值的鍵。def
- 此首選項節點不具有與 key 相關聯的值時所要返回的值。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。
NullPointerException
- 如果 key 為 null。(預設值 null 是 允許的。)public void remove(String key)
Preferences.remove(String)
中的規範實作 remove(String) 方法。
此實作獲取首選項節點的鎖,檢查該節點是否未被移除,調用 removeSpi(String)
,並且如果存在首選項更改偵聽器,則將由事件指派執行緒所處理的通知事件加入佇列。
Preferences
中的 remove
key
- 從首選項節點中移除其映射關係的鍵。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。public void clear() throws BackingStoreException
Preferences.clear()
中的規範實作 clear 方法。
此實作獲取首選項節點的鎖,調用 keys()
以獲取鍵的陣列,並且對每個鍵調用 remove(String)
,從而在陣列上進行迭代。
Preferences
中的 clear
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。Preferences.removeNode()
public void putInt(String key, int value)
Preferences.putInt(String,int)
中的規範實作 putInt 方法。
此實作使用 Integer.toString(int)
將 value 轉換為一個字元串,並在結果上調用 put(String,String)
。
Preferences
中的 putInt
key
- 要與字元串形式的 value 相關聯的鍵。value
- 要與 key 相關聯的字元串形式的值。
NullPointerException
- 如果 key 為 null。
IllegalArgumentException
- 如果 key.length() 超過 MAX_KEY_LENGTH。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。Preferences.getInt(String,int)
public int getInt(String key, int def)
Preferences.getInt(String,int)
中的規範實作 getInt 方法。
此實作調用 get(key, null)
。如果返回值為非 null,則實作嘗試使用 Integer.parseInt(String)
將其轉換為 int。如果嘗試成功,則此方法返回得到的值。否則返回 def。
Preferences
中的 getInt
key
- 要作為 int 返回其關聯值的鍵。def
- 此首選項節點不具有與 key 相關聯的值或無法將該關聯值解釋為 int 時要返回的值。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。
NullPointerException
- 如果 key 為 null。Preferences.putInt(String,int)
,
Preferences.get(String,String)
public void putLong(String key, long value)
Preferences.putLong(String,long)
中的規範實作 putLong 方法。
此實作使用 Long.toString(long)
將 value 轉換為字元串,並在結果上調用 put(String,String)
。
Preferences
中的 putLong
key
- 要與字元串形式的 value 相關聯的鍵。value
- 要與 key 相關聯的字元串形式的值。
NullPointerException
- 如果 key 為 null。
IllegalArgumentException
- 如果 key.length() 超過 MAX_KEY_LENGTH。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。Preferences.getLong(String,long)
public long getLong(String key, long def)
Preferences.getLong(String,long)
中的規範實作 getLong 方法。
此實作調用 get(key, null)
。如果返回值為非 null,則實作嘗試嘗試使用 Long.parseLong(String)
將其轉換為 long。如果嘗試成功,則此方法返回得到的值。否則返回 def。
Preferences
中的 getLong
key
- 要作為 long 返回其關聯值的鍵。def
- 此首選項節點不具有與 key 相關聯的值或者無法將該關聯值解釋為 long 時要返回的值。
IllegalStateException
- 如果已使用 removeNode()
方法移除此節點(或其祖先)。
NullPointerException
- 如果 key 為 null。Preferences.putLong(String,long)
,
Preferences.get(String,String)
public void putBoolean(String key, boolean value)
Preferences.putBoolean(String,boolean)
中的規範實作 putBoolean 方法。
此實作使用 String.valueOf(boolean)
將 value 轉換為字元串,並在結果上調用 put(String,String)
。
Preferences
中的 putBoolean
key
- 要與字元串形式的 value 相關聯的鍵。value
- 要與 key 相關聯的字元串形式的值。
NullPointerException
- 如果 key 為 null。
IllegalArgumentException
- 如果 key.length() 超過 MAX_KEY_LENGTH。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。Preferences.getBoolean(String,boolean)
,
Preferences.get(String,String)
public boolean getBoolean(String key, boolean def)
Preferences.getBoolean(String,boolean)
中的規範實作 getBoolean 方法。
此實作調用 get(key, null)
。如果返回值為非 null,則使用 String.equalsIgnoreCase(String)
將其與 "true" 相比較。如果比較返回 true,則此調用返回 true。否則,再次使用 String.equalsIgnoreCase(String)
將初始值與 "false" 相比較。如果比較返回 true,則此調用返回 false。否則此調用返回 def。
Preferences
中的 getBoolean
key
- 要作為 boolean 返回其關聯值的鍵。def
- 此首選項節點不具有與 key 相關聯的值或無法將該關聯值解釋為 boolean 時要返回的值。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。
NullPointerException
- 如果 key 為 null。Preferences.get(String,String)
,
Preferences.putBoolean(String,boolean)
public void putFloat(String key, float value)
Preferences.putFloat(String,float)
中的規範實作 putFloat 方法。
此實作使用 Float.toString(float)
將 value 轉換為字元串,並在結果上調用 put(String,String)
。
Preferences
中的 putFloat
key
- 要與字元串形式的 value 相關聯的鍵。value
- 要與 key 相關聯的字元串形式的值。
NullPointerException
- 如果 key 為 null。
IllegalArgumentException
- 如果 key.length() 超過 MAX_KEY_LENGTH。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。Preferences.getFloat(String,float)
public float getFloat(String key, float def)
Preferences.getFloat(String,float)
中的規範實作 getFloat 方法。
此實作調用 get(key, null)
。如果返回值為非 null,則實作嘗試使用 Float.parseFloat(String)
將其轉換為 float。如果嘗試成功,則此方法返回得到的值。否則返回 def。
Preferences
中的 getFloat
key
- 要作為 float 返回其關聯值的鍵。def
- 此首選項節點不具有與 key 相關聯的值或無法將該關聯值解釋為 float 時要返回的值。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。
NullPointerException
- 如果 key 為 null。Preferences.putFloat(String,float)
,
Preferences.get(String,String)
public void putDouble(String key, double value)
Preferences.putDouble(String,double)
中的規範實作 putDouble 方法。
此實作使用 Double.toString(double)
將 value 轉換為字元串,並在結果上調用 put(String,String)
。
Preferences
中的 putDouble
key
- 要與字元串形式的 value 相關聯的鍵。value
- 要與 key 相關聯的字元串形式的值。
NullPointerException
- 如果 key 為 null。
IllegalArgumentException
- 如果 key.length() 超過 MAX_KEY_LENGTH。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。Preferences.getDouble(String,double)
public double getDouble(String key, double def)
Preferences.getDouble(String,double)
中的規範實作 getDouble 方法。
此實作調用 get(key, null)
。如果返回值為非 null,則實作嘗試使用 Double.parseDouble(String)
將其轉換為 double。如果嘗試成功,則此方法返回得到的值。否則返回 def。
Preferences
中的 getDouble
key
- 要作為 double 返回其關聯值的鍵。def
- 此首選項節點不具有與 key 相關聯的值或無法將該關聯值解釋為 double 時要返回的值。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。
NullPointerException
- 如果 key 為 null。Preferences.putDouble(String,double)
,
Preferences.get(String,String)
public void putByteArray(String key, byte[] value)
Preferences.putByteArray(String,byte[])
中的規範實作 putByteArray 方法。
Preferences
中的 putByteArray
key
- 要與字元串形式的 value 相關聯的鍵。。value
- 要與 key 相關聯的字元串形式的值。
NullPointerException
- 如果 key 或 value 為 null。
IllegalArgumentException
- 如果 key.length() 超過 MAX_KEY_LENGTH 或者 value.length 超過 MAX_VALUE_LENGTH*3/4。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。Preferences.getByteArray(String,byte[])
,
Preferences.get(String,String)
public byte[] getByteArray(String key, byte[] def)
Preferences.getByteArray(String,byte[])
中的規範實作 getByteArray 方法。
Preferences
中的 getByteArray
key
- 要作為位元組陣列返回其關聯值的鍵。def
- 此首選項節點不具有與 key 相關聯的值或無法將該關聯值解釋為位元組陣列時要返回的值。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。
NullPointerException
- 如果 key 為 null。(值 null 用於 def 是 允許的。)Preferences.get(String,String)
,
Preferences.putByteArray(String,byte[])
public String[] keys() throws BackingStoreException
Preferences.keys()
中的規範實作 keys 方法。
此實作獲取首選項節點的鎖,檢查該節點是否未被移除並調用 keysSpi()
。
Preferences
中的 keys
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。public String[] childrenNames() throws BackingStoreException
Preferences.childrenNames()
中的規範實作 children 方法。
此實作獲取首選項節點的鎖,檢查該節點是否未被移除,建構已初始化為已快取記憶體的子節點名稱(此節點「子快取記憶體」中的子節點)的 TreeSet,調用 childrenNamesSpi()
並將所有返回的子名稱添加到該 set 中。使用 toArray 方法將階層樹 set 的元素轉儲到 String 陣列中,並返回此陣列。
Preferences
中的 childrenNames
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。cachedChildren()
protected final AbstractPreferences[] cachedChildren()
public Preferences parent()
Preferences.parent()
中的規範實作 parent 方法。
此實作獲取首選項節點的鎖,檢查該節點是否未被移除,並返回傳遞給此節點建構子的父值。
Preferences
中的 parent
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。public Preferences node(String path)
Preferences.node(String)
中的規範實作 node 方法。
此實作獲取首選項節點的鎖並檢查該節點是否未被移除。如果 path 為 "",則返回此節點;如果 path 為 "/",則返回此節點的根。如果 path 中的第一個字元不是 '/',則此實作將 path 分解為標記,並從此節點到指定節點遞歸式遍歷此路徑,在遍歷的每一個步驟都要「使用」path 中的名稱和斜槓。在每一個步驟,都要鎖定當前節點並為指定節點檢查該節點的子快取記憶體。如果未找到,則該名稱已經過檢查,以確保其長度不超過 MAX_NAME_LENGTH。然後,調用 childSpi(String)
方法並將結果存儲在此節點的子快取記憶體中。如果新創建的 Preferences 物件的 newNode
欄位為 true,並且存在任一節點更改偵聽器,則將由事件指派執行緒所處理的通知事件加入佇列。
沒有其他的標記時,此方法將返回在子快取記憶體中找到的最後一個值或 childSpi 返回的值。如果在遍歷過程中,連續出現兩個 "/" 標記或者最後一個標記是 "/"(而不是名稱),則拋出適當的 IllegalArgumentException。
如果 path 的第一個字元是 '/'(指示絕對路徑名),則在將 path 分解為標記前,刪除此首選項節點的鎖,此方法從根(不是從此節點)開始遞歸式遍歷此路徑。該遞歸在其他方面與對相對路徑名的描述相同。根據 locking invariant
,從根節點開始遍歷前刪除此節點上的鎖,這對於避免可能發生的死鎖是至關重要的。
Preferences
中的 node
path
- 要返回的首選項節點的路徑名。
IllegalArgumentException
- 如果路徑名無效(即它包含多個連續的斜槓字元,或者以斜槓字元結束並且大於一個 long 字元)。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。Preferences.flush()
public boolean nodeExists(String path) throws BackingStoreException
Preferences.nodeExists(String)
中的規範實作 nodeExists 方法。
此實作非常類似於 node(String)
,不同之處是使用了 getChild(String)
而沒有使用 childSpi(String)
。
Preferences
中的 nodeExists
path
- 要檢查其是否存在的節點的路徑名。
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。
IllegalArgumentException
- 如果路徑名無效(即它包含多個連續的斜槓字元,或者以斜槓字元結束並且大於一個 long 字元)。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先),並且 pathname 不是空字元串 ("")。public void removeNode() throws BackingStoreException
Preferences.removeNode()
中的規範實作 removeNode() 方法。
此實作檢查此節點是否為根;如果是,則拋出適當的異常。然後,它鎖定此節點的父節點,並調用遞歸說明器方法來遍歷以此節點為根的子階層樹。遞歸方法鎖定其所調用的節點,檢查它是否未被刪除,然後確保已快取記憶體其所有子節點:調用 childrenNamesSpi()
方法並檢查每個返回的子節點名稱是否已包含在子快取記憶體中。如果沒有快取記憶體子節點,則會調用 childSpi(String)
方法為其創建一個 Preferences 實例並將此實例置於子快取記憶體中。然後,說明器方法在其子快取記憶體所包含的每個節點上遞歸式自我調用。下一步,它調用 removeNodeSpi()
,將其自身標記為已移除,並從其父節點的子快取記憶體中自我移除。最後,如果存在任何節點更改偵聽器,則其會將由事件指派執行緒所處理的通知事件加入佇列。
注意,始終使用所有祖先來調用說明器方法,直到鎖定「未被移除的最近祖先」為止。
Preferences
中的 removeNode
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。
UnsupportedOperationException
- 如果在根節點上調用此方法。
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。Preferences.flush()
public String name()
Preferences.name()
中的規範實作 name 方法。
此實作僅返回傳遞給此節點建構子的名稱。
Preferences
中的 name
public String absolutePath()
Preferences.absolutePath()
中的規範實作 absolutePath 方法。
此實作僅返回建構此節點時計算出的絕對路徑名(基於傳遞給此節點建構子的名稱和傳遞給此節點祖先建構子的名稱)。
Preferences
中的 absolutePath
public boolean isUserNode()
Preferences.isUserNode()
中的規範實作 isUserNode 方法。
此實作將此節點的根節點(在 private 欄位中存儲)與 Preferences.userRoot()
返回的值相比較。如果兩個物件參考相同,則此方法返回 true。
Preferences
中的 isUserNode
public void addPreferenceChangeListener(PreferenceChangeListener pcl)
Preferences
複製的描述Preferences.removeNode()
方法不 產生首選項更改事件,該方法只產生節點更改事件。首選項更改事件是 由 clear 方法產生的。)
儘管有些實作可以為在 JVM 外進行的更改產生事件,但只有在已註冊偵聽器所在的 JVM 中所作的更改才能得到保證。事件可能是更改變得持久之前產生的。在此節點的子節點中修改首選項時不產生事件;需要此類別事件的調用者必須在每個子節點中註冊。
Preferences
中的 addPreferenceChangeListener
pcl
- 要添加的首選項更改偵聽器。Preferences.removePreferenceChangeListener(PreferenceChangeListener)
,
Preferences.addNodeChangeListener(NodeChangeListener)
public void removePreferenceChangeListener(PreferenceChangeListener pcl)
Preferences
複製的描述
Preferences
中的 removePreferenceChangeListener
pcl
- 要移除的首選項更改偵聽器。Preferences.addPreferenceChangeListener(PreferenceChangeListener)
public void addNodeChangeListener(NodeChangeListener ncl)
Preferences
複製的描述Preferences.removeNode()
調用即可產生多個節點更改事件,每個都對應於以已移除節點為根的子階層樹中的一個節點。)
儘管有些實作可以為在 JVM 外進行的更改產生事件,但只有在註冊偵聽器所在的 JVM 中所作的更改才能得到保證。事件可能是更改變得持久之前產生的。添加或移除此節點的間接子節點時不產生事件;需要此類別事件的調用者必須在每個子節點中註冊。
節點的創建難以得到保證。因為節點是基於存取隱式創建的,實作無法確定存取前內部存儲中是否存在子節點(例如,內部存儲不可存取或已快取記憶體資訊過期)。在這些情形下,實作既不要求產生節點更改事件也不禁止這樣做。
Preferences
中的 addNodeChangeListener
ncl
- 要添加的 NodeChangeListener。Preferences.removeNodeChangeListener(NodeChangeListener)
,
Preferences.addPreferenceChangeListener(PreferenceChangeListener)
public void removeNodeChangeListener(NodeChangeListener ncl)
Preferences
複製的描述
Preferences
中的 removeNodeChangeListener
ncl
- 要移除的 NodeChangeListener。Preferences.addNodeChangeListener(NodeChangeListener)
protected abstract void putSpi(String key, String value)
利用此節點上保持的鎖定調用此方法。
protected abstract String getSpi(String key)
一般而言,此方法在任何情形下也不應拋出異常。但是,如果它確實拋出了異常,則該異常將被解釋為 null,並按 null 返回值對待。
利用此節點上保持的鎖定調用此方法。
protected abstract void removeSpi(String key)
利用此節點上保持的鎖定調用此方法。
protected abstract void removeNodeSpi() throws BackingStoreException
Preferences.removeNode()
方法以自下向上的方式重複調用此方法,在移除節點本身之前首先移除該節點的所有子節點)。
使用此節點及其父節點上保持的鎖調用此方法(對 Preferences.removeNode()
的一次調用即可移除所有祖先)。
在此節點(或祖先)上調用 flush 方法之前對節點的移除不必是持久的。
如果此節點拋出 BackingStoreException,則該異常將會傳播到封閉的 removeNode()
調用之外。
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。protected abstract String[] keysSpi() throws BackingStoreException
利用此節點上保持的鎖調用此方法。
如果此節點拋出 BackingStoreException,則該異常將會傳播到封閉的 keys()
調用之外。
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。protected abstract String[] childrenNamesSpi() throws BackingStoreException
利用此節點上保持的鎖調用此方法。
如果此節點拋出 BackingStoreException,則該異常將會傳播到封閉的 childrenNames()
調用之外。
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。protected AbstractPreferences getChild(String nodeName) throws BackingStoreException
Preferences.MAX_NAME_LENGTH
個字元。此外,還要保證此節點未被移除。(如果選擇覆寫此方法,則實作者不必檢查這些事情。)
最後,保證最後一次將指定節點移除後此方法的以前調用或 childSpi(java.lang.String)
未曾返回它。換句話說,快取記憶體的值始終在首選項中使用,以調用此方法。(如果選擇覆寫此方法,則實作者不必維護它自己以前返回的子節點快取記憶體。)
此實作獲取首選項節點的鎖,調用 childrenNames()
以獲取此節點的子節點的名稱陣列,並在該陣列上迭代,將每個子節點的名稱與指定節點名稱進行比較。如果子節點名稱正確,則調用 childSpi(String)
方法並返回得到的節點。如果迭代完成時沒有找到指定的名稱,則返回 null。
nodeName
- 要搜尋的子節點的名稱。
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。protected abstract AbstractPreferences childSpi(String name)
Preferences.MAX_NAME_LENGTH
個字元。此外,還要保證此節點未被移除。(實作者不必檢查這些事情。)
最後,保證最後一次將指定節點移除後此方法的以前調用或 getChild(String)
未曾返回它。換句話說,快取記憶體的值始終在首選項中使用,以調用此方法。子類別不必維護它們自己以前返回的子節點快取記憶體。
實作者必須確保返回的節點沒有被移除。如果以前移除了此節點的名稱相同的子節點,則實作者必須返回一個新建構的 AbstractPreferences 節點;一旦移除,AbstractPreferences 節點便無法「再生」。
如果此方法導致創建了節點,則在此節點或其祖先之一(或子節點)上調用 flush 方法之前,不保證該節點是持久的。
利用此節點上保持的鎖調用此方法。
name
- 要返回的子節點的名稱(相對於此首選項節點)。
public String toString()
Preferences
中的 toString
public void sync() throws BackingStoreException
Preferences.sync()
中的規範實作 sync 方法。
此實作調用鎖定此節點的遞歸說明器方法,針對該方法調用 syncSpi() ,解除此節點的鎖,並在每個「快取記憶體子節點」上遞歸式調用這一方法。快取記憶體子節點是此節點的子節點,已在此 VM 中創建並且後來沒有被移除。實際上,此方法對以此節點為根的「快取記憶體子階層樹」進行深度優先遍歷,針對該 subTree 中的每個節點調用 syncSpi(),這時只有該節點是鎖定的。注意,是自上向下調用 syncSpi() 的。
Preferences
中的 sync
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。
IllegalStateException
- 如果已經使用 removeNode()
方法移除了此節點(或其祖先)。flush()
protected abstract void syncSpi() throws BackingStoreException
如果此節點拋出 BackingStoreException,則該異常將會傳播到封閉的 sync()
調用之外。
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。public void flush() throws BackingStoreException
Preferences.flush()
中的規範實作 flush 方法。
此實作調用鎖定此節點的遞歸說明器方法,針對該方法調用 flushSpi(),解除此節點的鎖,並在每個「快取記憶體子節點」上遞歸式調用這一方法。快取記憶體子節點是此節點的子節點,已在此 VM 中創建並且後來沒有被移除。實際上,此方法對以此節點為根的「快取記憶體子階層樹」進行深度優先遍歷,針對該 subTree 中的每個節點調用 flushSpi(),這時只有該節點是鎖定的。注意,是自上向下調用 flushSpi() 的。
如果在已經使用 removeNode()
方法移除的節點上調用此方法,則會在此節點(而非其他節點)上調用 flushSpi()。
Preferences
中的 flush
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。flush()
protected abstract void flushSpi() throws BackingStoreException
如果此節點拋出 BackingStoreException,則該異常將會傳播到封閉的 flush()
調用之外。
BackingStoreException
- 如果由於內部存儲的故障或未能通信而無法完成此操作。protected boolean isRemoved()
removeNode()
方法移除此節點(或其祖先)時才返回 true。此方法在返回用於追蹤此狀態的 private 欄位內容前鎖定此節點。
removeNode()
方法移除了此節點(或其祖先)時才返回 true。public void exportNode(OutputStream os) throws IOException, BackingStoreException
Preferences.exportNode(OutputStream)
中的規範實作 exportNode 方法。
Preferences
中的 exportNode
os
- 根據其內容發出 XML 文檔的輸出串流。
IOException
- 如果寫入指定的輸出串流導致一個 IOException。
BackingStoreException
- 如果無法從內部存儲讀取首選項資料。Preferences.importPreferences(InputStream)
public void exportSubtree(OutputStream os) throws IOException, BackingStoreException
Preferences.exportSubtree(OutputStream)
中的規範實作 exportSubtree 方法。
Preferences
中的 exportSubtree
os
- 根據其內容發出 XML 文檔的輸出串流。
IOException
- 如果寫入指定的輸出串流導致一個 IOException。
BackingStoreException
- 如果無法從內部存儲讀取首選項資料。Preferences.importPreferences(InputStream)
,
Preferences.exportNode(OutputStream)
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。