考虑一个只有一个方法的interface
:
Object getValue(String data);
假设这描述了从String
到任何其他数据类型的数据转换(假设转换有效)。对于来自文本上下文的数据,可能有多个具有相同数据类型的列,因此同一数据转换器将有多个实例。
很久以前,我编写了代码来缓存这些实例,而不是拥有同一对象的多个实例:
private HashMap<Class<? extends T>, T> map;
public synchronized T getInstance(Class<? extends T> type) throws IllegalArgumentException
{
T instance = map.get(type);
if (instance == null)
{
try
{
instance = type.newInstance();
}
catch (Exception ex)
{
throw new IllegalArgumentException("The provided class cannot be instantiated: "
+ type.getName() + "n" + ex);
}
map.put(type, instance);
}
return instance;
}
由于这些类没有状态,因此在当时拥有同一类的许多实例似乎是一种浪费,而单个共享实例就可以了。
但是,维护映射可能比拥有同一对象的多个实例(即使可以共享单个实例)的开销更大。我的意思是,即使有多个实例,方法代码也只放在内存中一次,对吗?所以在我看来,JVM实际上是在为我保留缓存。
对此事有什么想法吗?单一实例缓存方法会更好吗?
感谢您阅读我的帖子。
每次使用 new
时,都会创建一个在堆中分配的新对象实例。当然,可执行代码属于类,它只是共享实例。
无论如何,从您的文本来看,您的对象没有状态,您只是使用其他数据转换 String 参数。鉴于此,我会选择一种static
方法。