【发布时间】:2015-02-27 22:27:02
【问题描述】:
我有一个在 Android 可穿戴设备上运行的类,它应该只有一个实例,但是我偶尔会观察到一些意想不到的行为,这让我推测在某些情况下是否可能有两个实例正在创建中。
如果我在 C 或 C++ 世界中,我只需将日志语句添加到类的方法中以记录对象自身的内存地址,并且可以直接检查是否实际上存在两个对象或只有一个对象。
能够识别特定对象实例的 Java/Android 等效方法是什么?
【问题讨论】:
-
@Blackbelt:不,这根本不是我们想要的。
-
您可以使用单例模式来防止多个实例运行。如果还是坚持跟踪对象,可以在构造函数中hash当前时间毫秒。
-
如果您的类没有覆盖
hashCode()(听起来没有理由这样做),那么您可以合理地期望该方法为不同的实例返回不同的值。 -
如果它确实覆盖了
hashCode,stackoverflow.com/a/909861/1864688 -
还要注意,单例模式不能 100% 有效地防止多个实例。一方面,您可以使用标准的 Singleton 实现,每个 ClassLoader 最多拥有一个实例,另一方面,在某些情况下,您可以通过序列化获得多个实例。