我正在编写一个用于测试目的的小型应用程序,该应用程序接受 SOAP 调用、为每个调用生成 UID 并返回此 UID。 UID 需要存储在服务器上,所以我想我应该使用一个简单的静态 Map 来存储它们。
我创建了一个新类:
MemoryMap.java
public class MemoryMap {
static Map<String, String> memoryMap = new ConcurrentHashMap<String, String>();
static void printMapContents() {
for (Entry<String, String> pair : memoryMap.entrySet()) {
System.out.println("Key = [" + pair.getKey() + "]");
System.out.println("Value = [" + pair.getValue() + "]");
}
}
}
然后将其与调用一起使用:
MemoryMap.memoryMap.put(UID, "testString");
MemoryMap.printMapContents();
还有...
MemoryMap.memoryMap.remove(parameters.getUID());
MemoryMap.printMapContents();
这工作得很好,但我不认为这是否是为此目的实现单个 Map 的推荐方法。
最佳答案
如果您的应用程序必须模拟后端,例如数据库,我建议在某些数据存储接口(interface)中抽象出映射,然后为您的应用程序提供由映射支持的该接口(interface)实现的单例范围实例。例如:
interface MyDataStore<V>{
V retrieve(UUID id);
void remove(UUID id);
}
public final class MockDataStore implements MyDataStore<String>{
private final static MockDataStore instance = new MockDataStore();
public static MockDataStore instance(){
return instance;
}
private MockDataStore(){}
private final ConcurrentHashMap<UUID,String> m =
new ConcurrentHashMap<UUID,String>();
@Override
String retrieve(UUID id){
return m.get(id);
}
@Override
void remove(UUID id){
m.remove(id);
}
}
然后明天您可以将实现替换为与实际数据库交互的内容。这是 ORM 系统的非常粗略的近似。
更好的是,我会立即从数据库开始。您可以使用内存数据库(例如 H2 ),以便在需要时将其替换为实际数据库(可能存在一些小的迁移问题)。
最后,如果您的存储需求增长,例如,您需要表及其之间的关系,我建议查看 JPA 及其实现之一,例如 Hibernate .
关于java - 实现静态 "memory"映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22840723/