根據你想才達到什麼Benoit的想法,我想如果你想thread-最好的辦法是使用地圖(或ConcurrentMap安全):
ConcurrentMap<String, List<String>> myData = new ConcurrentHashMap<>();
這樣,您可以通過您提供的id來解決任何列表。
List<String> myList = myData.get(id);
如果要限制列表的訪問器(例如只提供了add方法),你需要封裝列表中的一類:
public final class Example {
private final List<String> docs = new ArrayList<>();
public boolean addDoc(final String doc) {
return docs.add(doc);
}
}
然後使用地圖如下:
ConcurrentMap<String, Example> myData = new ConcurrentHashMap<>();
並添加文檔這樣的:
myData.get(id).addDoc(myDoc);
希望這有助於...
在註釋中討論的話題:設置變量
你有一個這樣的類:
public class Example {
public String var;
}
和實例這樣
Example ex = new Example();
您可以
設置的值
ex.var = "abc";
個
有了這樣
public class Example {
private String var;
public void setVar(String var) {
this.var = var;
}
}
使用CALSS
ex.setVar("abc");
管理多個實例:
1)您的網絡服務中獲得的信息與ID
2)您的服務器應用程序存儲實例的地圖,您可以通過ID訪問它(請參閱上面的地圖示例)。 在Web服務調用
Example ex = ReportHolder.getReport(id);
假設這樣一個類:
public class ReportHolder {
private static ConcurrentMap<String, Example> map = new ConcurrentMap<>();
public static Example getReport(final String id) {
return map.get(id);
}
}
3)然後你就可以操作實例。
確保您正確理解術語變量,類,實例和靜態。 Otherwiese這將是很難理解爲什麼你的錯誤發生。
來源
2013-03-07 12:43:09
Don
你在用'myExample' var做什麼?你不能讓'myMethod'返回它嗎?這樣,任何*外部點*都會根據需要管理自己的實例。 – sp00m 2013-03-07 11:19:38
'myExample'在方法'myMethod'中具有本地可見性,對外部調用完全不可見。或者你是否打算將'myExample'作爲實例或類變量? – A4L 2013-03-07 11:20:39
我不確定你想用myMethod來實現你爲什麼不調用構造函數來創建一個新的對象。我沒有看到使用這種方法的好處,並順便說一句。 - 如前所述 - 創建的Example對象不能在方法外部使用。 – Don 2013-03-07 11:28:17