我是Java的新手,我有这样的场景。我有一个名为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
多次调用,所以我希望每次都不要创建对象,而是重新使用已经创建的对象。
我不在这里寻找Singleton,因为那不适合我的用例。相反,因为这个方法创建了大量的对象,我只希望这种方法可以重用它们。
提前致谢。
答案 0 :(得分:0)
尝试使用密钥HashMap
存储到data
并为已创建的类值。如果首先调用该方法,请检查具有此类型的类是否已在HashMap中。
答案 1 :(得分:0)
在构造函数中创建对象并将它们存储在私有变量
中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
}
}
答案 2 :(得分:0)
如果你想要的只是创建一个对象,并且每次调用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();
}
}
这是你的意思吗?
答案 3 :(得分:0)
假设您在应用程序的生命周期中需要相同的对象:
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();
}
答案 4 :(得分:0)
有几种方法可以做到这一点,最简单的方法是定义包含实例的类字段。
另一种方法是创建一个abstract factory来创建和缓存您的实例。