java - 获取属于某个类的所有对象

标签 java android reflection

我有 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 库。如果您不想使用它们,只需使用 Mapput(this, Boolean.TRUE)

WeakReference 意味着如果对象不在其他地方使用,它们将被垃圾回收。 IdentifyHashMap 意味着无论您是否重写 hashCode()equals(),您的映射都将填充不同的实例。 (感谢 Luke Hutteman 的这些改进)

是否应该以这种方式实现这一点是有争议的。我想说,无论谁创建实例都可以保存对它们的引用,而不是类本身。

关于java - 获取属于某个类的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4127421/

相关文章:

java使用两个哈希表比一个更好?

java - 基于其他值设置对象的更优雅的方式

android - setColorFilter() 在 Android 4 上损坏,在 Android 5 上工作

.net - 如何检查一种 .NET 类型是否抽象地实现了某个 .NET 接口(interface)?

java正则表达式,读取文件夹

android - 如何允许 android 应用 alpha/beta 测试人员免费下载该应用?

android - 显式 Intent 广播接收器 - Action 过滤器行为

java - Play 的 Java 反射的性能和替代方案!框架类路由功能

java - 这是否被视为反射(reflection)?在何种程度上?

java - 为什么finally block 中的变量需要是静态的