Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 缓存我以前创建的对象_Java - Fatal编程技术网

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

我是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
调用了很多次,我希望不要每次都创建对象,而是重用已经创建的对象

注: 我不是在这里寻找单例,因为这不适合我的用例。相反,因为这个方法创建了很多对象,所以我只希望这个方法能够重用它们


提前感谢。

尝试使用键
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应用程序。首先用这个更新你的问题,然后你可以适应下面给出的任何不同的解决方案,否则你的问题将被划出主题