我来自Ruby on Rails背景,并开始做一些Android编程。
我正在寻找一种使用Java获取类中所有对象列表的方法。
在Rails中,您可以执行类似Building.all的操作,它将返回所有已创建建筑物的数组
Java中有类似的东西吗?
如果是这样,您是否可以发布一个示例,它将为Building类返回一组构建对象?
答案 0 :(得分:3)
没有。但是如果你想要这样的清单,你可以自己填写:
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(..)
来自番石榴图书馆。如果您不想使用它们,只需使用Map
和put(this, Boolean.TRUE)
WeakReference
表示如果不在其他地方使用对象,则会对其进行垃圾回收。 IdentifyHashMap
表示覆盖hashCode()
和equals()
无关紧要,您的地图将填充不同的实例。 (感谢Luke Hutteman的这些改进)
这是否应该以这种方式实现是有争议的。我会说创建实例的人可以保留对它们的引用,而不是类本身。
答案 1 :(得分:2)
Building.all
仅适用于Rails,因为类也是ActiveRecord对象关系查询的入口点。当你说Building.all
时,它正在运行一个SQL查询来从Buildings表中提取所有构建对象。
因此,Java中真正的等价物是使用使用Active Record模式的ORM工具。有一些,例如this one,但没有一个真正抓住我能找到的。不知道它是否适用于Android。
Grails可以与Android一起使用吗?如果你想回到你的Rails舒适区,但在JVM世界里,这是你最好的选择。
答案 2 :(得分:1)
Luis,当你在Rails中调用Building.all时,实际上会发生很多事情:
因此,如果你想在Android上寻找相同的魔法,开箱即用,那么不幸的是,事实并非如此。相反,您应该实现自己的ORM和迁移方法。起点是SQLiteOpenHelper。