我有一个工厂创建类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