在Java中,我们可以通过以下方法销毁Singleton对象。
public class MySingleton {
private static MySingleton ourInstance = null;
private MySingleton() {
}
public static MySingleton getInstance() {
if(ourInstance == null)
ourInstance = new MySingleton();
return ourInstance;
}
private void destroy(){
ourInstance = null;
}
}
所以构造函数将在下次调用。
以同样的方式销毁Kotlin Singleton对象。
object CacheManager{
init {
//some operations
}
fun destroy(){
//How to destroy?
}
}
我需要销毁Object并再次调用init块。 我怎样才能做到这一点?
答案 0 :(得分:4)
这在科特林是不可能的;对象没有被破坏的概念。如果您需要这种可能性,则不应使用object
,而是使用常规class
并手动实现destroy逻辑,类似于在Java中执行此操作。
答案 1 :(得分:4)
我刚刚使用android studio将你的JAVA代码转换为Kotlin,结果看起来像是一个允许破坏单例对象的单例类。
class MySingleton private constructor() {
fun destroy() {
ourInstance = null
}
companion object {
private var ourInstance: MySingleton? = null
val instance: MySingleton
get() {
if (ourInstance == null)
ourInstance = MySingleton()
return ourInstance!!
}
}
var b: String="Default value"
}
您可以通过以下代码
进行测试 var singleton:MySingleton= MySingleton.instance
singleton.b="Singleton Object Initlized"
Log.d("Value",singleton.b)
singleton.destroy()
singleton= MySingleton.instance
Log.d("Reset",singleton.b)
可能这种做法可能是错误的。如果这是错的,那么我将删除答案,请告诉我。