代码之家  ›  专栏  ›  技术社区  ›  Marcus Grass

在不同的Java类中使用已经初始化的类,

  •  1
  • Marcus Grass  · 技术社区  · 7 年前

    我是Java新手,我正在构建一个SrimBooT应用程序,其中不同的类需要来自同一个源的数据。源文件是两个文件,但重要的是要花相当长的时间来获取数据;获取所有数据的速度与获取不同类所需的每个部分的速度差不多,因此对函数进行分区没有帮助。

    因此,我想让一个类初始化一次,获取所有数据,然后为需要数据的类提供服务。理想情况下,只有在请求时才初始化它,然后将数据保存在实例中。

    假设我有课:

    package myapp;
    import java.util.concurrent.TimeUnit;
    import java.lang.InterruptedException;
    
    public class ExampleClass {
        private int usefulValue;
    
        public ExampleClass(){
            this.usefulValue = slowMethod();
        }
    
        private int slowMethod(){ //just an example of something that takes time
            int usefulValue;
            try {
                TimeUnit.SECONDS.sleep(500);
            } catch (InterruptedException e){
                ;
            }
            usefulValue = 15;
            return usefulValue;
    
        }
        public int getUsefulValue(){
            return this.usefulValue;
        }
    }
    

    我怎样才能让它跑起来 usefulValue 要在不在每个单独的类中重新加载的情况下对包中的其他类可用吗?

    这些值是非常易于管理的内存,我正在专门寻找内存中的解决方案;我可以把它写入文件/db中,或者运行一个为应用程序服务的套接字服务器,但问题涉及到在爪哇可以做什么。

    PS。 有用价值 每天更换一次

    2 回复  |  直到 7 年前
        1
  •  1
  •   Asad Ali    7 年前
    package myapp;
    import java.util.concurrent.TimeUnit;
    import java.lang.InterruptedException;
    
    public class ExampleClass {
    public static int usefulValue;
    
    public ExampleClass(){
        ExampleClass.usefulValue = slowMethod();
    }
    
    private int slowMethod(){ //just an example of something that takes time
        int usefulValue;
        try {
            TimeUnit.SECONDS.sleep(500);
        } catch (InterruptedException e){
            ;
        }
        usefulValue = 15;
        return usefulValue;
    
    }
    public int getUsefulValue(){
        return ExampleClass.usefulValue;
    }
    }
    

    另外,在任何其他类中,您都可以像这样使用它的值 ExampleClass.usefulValue 所以它的值通过应用程序或在这个线程中保持不变。

        2
  •  1
  •   Ilya    7 年前

    您可以使用延迟初始化。

        private Integer usefulValue;
        public ExampleClass(){
            // this.usefulValue = slowMethod();
        }
    
        public int getUsefulValue(){
            if (this.usefulValue == null) {
                this.usefulValue = slowMethod();
            }
            return this.usefulValue;
        }
    

    或用于: lombok

    推荐文章