为了访问java中其他地方的数据,我应该在哪里放置它?

时间:2018-04-26 07:51:31

标签: java

我想将来自文件的数据放到变量中,然后我可以方便地在别处(在其他类中)访问它。我知道file path并将其读入变量。然后我把它放在一个班级。数据不会更改并且只有一个副本。

// store data in a static field
public class MyContainer {
  private static Map<String, MyClass> data;
  public static void setData(Map<String, MyClass> data) {
    this.data = data;
  }
  public static Map<String, MyClass> getData(){
    return data;
  }
}

// set data at one place
Map<String, MyClass> data = new HashMap<>();
MyContainer.setData(data);

// access data at other places
MyContainer.getData(data);

虽然上面的代码可以实现这一点,但我认为很糟糕因为我可以在为其分配数据之前访问它。
如何正确实现?

2 个答案:

答案 0 :(得分:0)

如果数据永远不会更改,请在构造函数中设置它并删除setter。还要摆脱static关键字。

public class MyContainer {
    private final Map<String, MyClass> data = new HashMap<>();
    public MyContainer(@Nonnull Map<String, MyClass> data) {
        this.data.putAll(data);
    }
    public Map<String, MyClass> getData(){
        return data;
    }
}

您可能希望返回Collections.unmodifiableMap(data);,因此无法从外部修改data

答案 1 :(得分:-1)

使用getter方法。如果您担心某个课程在准备好之前试图访问它,请在getter中处理。

private boolean allowAccess; // set this to true once you're happy that the data is ready to read
public Map<String, MyClass> getData() {
  if (!allowAccess) {
    throw new IllegalStateException();
  }
  return data;
}