Class 作为静态变量的容器
Class as container of static variables
我正在 android 中使用 Rest 和观察者设计模式开发一个应用程序,当我执行 Rest 请求时,我会缓存响应,但我想让这些响应对象中的一些对象永久保留在内存中,直到应用程序被销毁。
所以我一直在考虑创建一个只有 public 静态变量的 class(有些项目使用这种 class 来声明常量字符串)来设置它们,然后我可以在内存中使用它。像这样:
public class Memory {
public static HashMap<String, PersonDto> people;
// This object could have another complex object as ArrayList or HashMap...
public static LocationsDto locations;
...
}
我只想知道这是否是执行我要解决的问题的坏习惯。
这取决于这些对象的用途。最重要的方面是:是否有可能并发modification/access?如果是这样,那么您应该实施某种同步。
如果保证在对它们进行任何访问之前构造这些对象,并且之后它们不会更改它们的状态,那么就同步问题而言,您的方法是可行的。
例如,如果您的 Dto 对象是 immutable and the hashmap will not be modified concurrently, than you are safe. If the hashmap needs to support concurrent access/modification, then take a look at the ConcurrentHashMap。
虽然这绝对不是坏习惯,但它通常被认为是具有全局可变状态的设计缺陷。你可以找到很多关于为什么会这样的信息。对我来说,最重要的缺点是可测试性和不可预测的程序状态问题。
如果您仍要使用它,您还需要同步对静态字段的访问。
我正在 android 中使用 Rest 和观察者设计模式开发一个应用程序,当我执行 Rest 请求时,我会缓存响应,但我想让这些响应对象中的一些对象永久保留在内存中,直到应用程序被销毁。
所以我一直在考虑创建一个只有 public 静态变量的 class(有些项目使用这种 class 来声明常量字符串)来设置它们,然后我可以在内存中使用它。像这样:
public class Memory {
public static HashMap<String, PersonDto> people;
// This object could have another complex object as ArrayList or HashMap...
public static LocationsDto locations;
...
}
我只想知道这是否是执行我要解决的问题的坏习惯。
这取决于这些对象的用途。最重要的方面是:是否有可能并发modification/access?如果是这样,那么您应该实施某种同步。
如果保证在对它们进行任何访问之前构造这些对象,并且之后它们不会更改它们的状态,那么就同步问题而言,您的方法是可行的。
例如,如果您的 Dto 对象是 immutable and the hashmap will not be modified concurrently, than you are safe. If the hashmap needs to support concurrent access/modification, then take a look at the ConcurrentHashMap。
虽然这绝对不是坏习惯,但它通常被认为是具有全局可变状态的设计缺陷。你可以找到很多关于为什么会这样的信息。对我来说,最重要的缺点是可测试性和不可预测的程序状态问题。 如果您仍要使用它,您还需要同步对静态字段的访问。