给定一个对象,我们如何检查一个类是否是单例的?
目前我正在使用这个
public class SingletonClass implements IsSingleton
Run Code Online (Sandbox Code Playgroud)
其中IsSingleton是我在单例类上实现的空白接口。所以这个类可以作为单例进行测试
SingletonClass obj = SingletonClass.getInstance();
if(obj instanceof IsSingleton)
System.out.println("Class is Singleton");
else
System.err.println("Class not singleton");
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来确定 Singleton 类。我已经尝试过reflection,但问题是getConstructors()只返回声明的公共类。因此它将把没有声明构造函数的类视为单例。
我认为这可能对你有帮助......每当在内存中创建任何对象时,总会有一个与其关联的哈希码。该哈希码是通过数学运算使用很少的参数(例如起始内存分配地址)计算出来的。因此,如果您对任何对象调用 hashcode() 任意次数,它将返回相同的哈希码。因此,只需调用返回预期单例类型对象的方法并对其调用 hashcode() 方法即可。如果它每次打印相同的哈希码,则意味着它是单例的,否则就不是。
很多人都说instanceof关键字可以帮助你确定一个对象是否是单例的。但是,我真的不明白,这怎么可能?instanceof 只是让我们检查实例是否属于任何特定类。因此,如果 A 类有多个实例,并且它们不是通过单例模式创建的,那么检查 instanceof 中的任何一个实例总是会返回 true。但是,它不能被称为单例,因为内存中的每个对象都存在单独的实例。
| 归档时间: |
|
| 查看次数: |
10393 次 |
| 最近记录: |