我有 Ruby on Rails 背景,并开始做一些 Android 编程。
我正在寻找一种使用 Java 获取类中所有对象的列表的方法。
在 Rails 中,您可以执行 Building.all 之类的操作,它将返回所有已创建建筑物的数组
Java中有类似的东西吗?
如果是这样,您可以发布一个小示例,该示例将返回 Building 类的建筑对象数组吗?
最佳答案
没有。但如果你想要有这样一个列表,你可以自己填写:
private static final Set<WeakReference<Building>> instances =
Setes.newSetFromMap(new IdentityHashMap<WeakReference<Building>>());
public Building() {
synchronized(Building.class) {
instances.add(new WeakReference(this));
}
}
// etc the same in all constructors
Sets.newSetFromMap(..)
来自 Guava 库。如果您不想使用它们,只需使用 Map
和 put(this, Boolean.TRUE)
WeakReference
意味着如果对象不在其他地方使用,它们将被垃圾回收。 IdentifyHashMap
意味着无论您是否重写 hashCode()
和 equals()
,您的映射都将填充不同的实例。 (感谢 Luke Hutteman 的这些改进)
是否应该以这种方式实现这一点是有争议的。我想说,无论谁创建实例都可以保存对它们的引用,而不是类本身。
关于java - 获取属于某个类的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4127421/