我想将来自文件的数据放到变量中,然后我可以方便地在别处(在其他类中)访问它。我知道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);
虽然上面的代码可以实现这一点,但我认为很糟糕因为我可以在为其分配数据之前访问它。
如何正确实现?
答案 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;
}