我有一個工廠創建類MyClass的對象,當它們存在時返回已生成的對象。由於我有創建方法(getOrCreateMyClass)採用多個參數,這是使用Map存儲和檢索對象的最佳方法?使用多個參數緩存對象
我目前的解決方案如下,但對我來說聽起來不太清楚。 我使用類MyClass的hashCode方法(稍作修改)根據類MyClass的參數構建int,並將其用作Map的關鍵字。
import java.util.HashMap;
import java.util.Map;
public class MyClassFactory {
static Map<Integer, MyClass> cache = new HashMap<Integer, MyClass>();
private static class MyClass {
private String s;
private int i;
public MyClass(String s, int i) {
}
public static int getHashCode(String s, int i) {
final int prime = 31;
int result = 1;
result = prime * result + i;
result = prime * result + ((s == null) ? 0 : s.hashCode());
return result;
}
@Override
public int hashCode() {
return getHashCode(this.s, this.i);
}
}
public static MyClass getOrCreateMyClass(String s, int i) {
int hashCode = MyClass.getHashCode(s, i);
MyClass a = cache.get(hashCode);
if (a == null) {
a = new MyClass(s, i);
cache.put(hashCode , a);
}
return a;
}
}
看起來不錯。你爲什麼不喜歡它? – skaffman 2010-11-14 20:57:19
嗯,它似乎沒有太多的面向對象,我目前有一個像這樣的工廠未知的錯誤,但也許問題不在於該代碼... – cdarwin 2010-11-14 20:59:32
對不起,我忘了一行! ! (這是示例代碼),修復cache.put – cdarwin 2010-11-14 21:21:39