如何在Kotlin中销毁单个对象并强制调用init块

时间:2018-02-23 10:22:54

标签: java kotlin singleton

在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块。 我怎样才能做到这一点?

2 个答案:

答案 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)
可能这种做法可能是错误的。如果这是错的,那么我将删除答案,请告诉我。