Java 缓存我以前创建的对象
我是Java新手,我有这样的场景。我有一个名为Java 缓存我以前创建的对象,java,Java,我是Java新手,我有这样的场景。我有一个名为createObject的方法,如下所示: public MyInterface createObject(EnumData data){ //creates many objects of the classes implements MyInterface interface switch(data) { case AppObject: return new AppObject(); case Test
createObject
的方法,如下所示:
public MyInterface createObject(EnumData data){
//creates many objects of the classes implements MyInterface interface
switch(data)
{
case AppObject:
return new AppObject();
case TestObject:
return new TestObject();
}
}
我希望我要缓存这些对象。因为方法createObject
调用了很多次,我希望不要每次都创建对象,而是重用已经创建的对象
注:
我不是在这里寻找单例,因为这不适合我的用例。相反,因为这个方法创建了很多对象,所以我只希望这个方法能够重用它们
提前感谢。尝试使用键
data
将存储到HashMap
中,并为创建的类赋值。如果调用该方法,请首先检查HashMap中是否已存在具有此类型的类 在构造函数中创建对象并将其存储在私有变量中
private AppObject appObject;
private TestObject testObject;
public MyConstructor() {
this.appObject = new AppObject();
this.testObject = new TestObject();
}
public MyInterface createObject(EnumData data){
//creates many objects of the classes implements MyInterface interface
switch(data)
{
case AppObject:
return this.appObject;
case TestObject:
return this.testObject
}
}
如果只需创建一次对象,并在每次调用createObject时返回该对象,则只需在createObject所在的同一类中创建一个字段:
private AppObject yourAppObject = new AppObject();
private TestObject testObject = new TestObject();
然后createObject可能看起来像这样:
public MyInterface createObject(EnumData data){
//creates many objects of the classes implements MyInterface interface
switch(data)
{
case AppObject:
return yourAppObject();
case TestObject:
return yourTestObject();
}
}
这就是您的意思吗?假设您希望在应用程序的生命周期中使用相同的对象:
enum EnumData {
APP_OBJECT(new AppObject()), TEST_OBJECT(new TestObject());
private final MyInterface obj;
private EnumData(final MyInterface obj) {
this.obj = obj;
}
public MyInterface getObject() {
return obj;
}
}
用法:
public MyInterface createObject(final EnumData data){
return data.getObject();
}
有几种方法可以做到这一点,最简单的方法是定义包含实例的类字段
另一种方法是创建用于创建和缓存实例的缓存。缓存有许多不同的属性,具体取决于需求。我不知道从哪里开始,这个问题是非常开放的。看看HashMap,我想,在java中,缓存有很多含义,这取决于您使用的应用程序类型,无论是独立应用程序还是Web应用程序。首先用这个更新你的问题,然后你可以适应下面给出的任何不同的解决方案,否则你的问题将被划出主题