我需要知道如何通過Hashtable循環,檢查每個值的可克隆性,並在可能的情況下克隆。此Hashtable具有所有的String鍵,但值可以是任何類。我在另一個堆棧溢出頁面中遇到了以下Hashmap示例,但我需要使用Hashtable來完成此操作。更具體地說,一個沒有括號。 (Hashtable而不是Hashtable<Type, Type>
。)我也看到了循環ArrayList和克隆每個元素的示例,但我需要使用散列表來完成此操作。我發佈了兩段代碼:第一個是我發現的HashMap示例,第二個是我當前的提案以及我遇到的問題。如何遍歷Map並複製每個值?
HashMap中
public Map<String,C> deepCopy(Map<String, C> original) {
Map<String, C> copy = new HashMap<String, C>(original.size());
for(Map.Entry<String, C> entry : original.entries()) {
copy.put(entry.getKey(), entry.getValue().clone());
}
}
我的建議
public class _HashtableCloningTest {
public Hashtable deepClone(Hashtable original) {
Hashtable newH = new Hashtable(original.size())
Set<String> keys = original.keySet();
for (String key : keys)
if (original.get(key) instanceof Cloneable)
newH.put(key, original.get(key).clone());
return newH;
}
}
該代碼將無法編譯。錯誤表示克隆方法在對象類上,並且該類上的方法受到保護。我需要它克隆當前值的類,但是因爲我作爲程序員不知道那個類,所以我不知道如何將它轉換爲合適的類。
任何有關這一障礙的見解和幫助將不勝感激。
你爲什麼要克隆任意對象?這通常是一種代碼味道,即IME。 –
這是我的客戶想要完成的方式。我意識到可能有更好的方法,但我需要知道如何做到這一點。我被告知這是可能的,即使不是最好的解決方案。 – user1567060
您的代碼存在的問題是,
Cloneable
很難正確實施,所以對於很多人來說,這不是克隆你所反對的可靠方法。閱讀http://stackoverflow.com/questions/4081858/about-java-cloneable解決你的問題,你需要知道放在什麼樣的情況下,在這個地圖並正確投放。 –