使用Kotlin将值保留在Application类中

我们知道Application类的行为就像一个单例,因此我们可以在其中存储一些应用会话数据,并从不同的屏幕与之交互。例如,我们在Java中这样做:

public class App extends Application {

    public static String myString;

    @Override
    public void onCreate() {
        super.onCreate();
    }

    public static String getMyString() {
        return myString;
    }

    public static void setMyString(String myString) {
        App.myString = myString;
    }

}

我们可以像App.setMyString("blah blah")这样使用它,并像这样App.getMyString()

我试图将其更改为kotlin,但没有成功:

class App : Application() {

    override fun onCreate() {
        super.onCreate()
    }

    companion object {
        var myString: String = null

        fun setMyString(str: String) {
            myString = str
        }

        fun getMyString(): String? {
            return myString
        }
    }

    init {
        myString = String()
    }
}

该变量不保留我的值

jeseca8897 回答:使用Kotlin将值保留在Application类中

这是将值分配给变量的方法

class App : Application() {

    override fun onCreate() {
        super.onCreate()

    }

    companion object {
        var myString: String? = null

        fun setMyStringData(str: String) {
            myString = str
        }

        fun getMyStringData(): String? {
            return myString
        }
    }

    init {
        myString = String()
    }


}

使用方法 对于设置数据

  

App.myString =“我分配了数据”

     

App.setMyStringData(“我正在分配数据”)

用于获取数据

  

Log.i(TAG,App.myString)

     

Log.i(TAG,App.getMyStringData?:“我为空”)

您正遇到Java中已定义的 setMyString getMyString 的任何问题,因此只需更改也可以使用的函数的名称。

,

如果您想使用Singleton pattern并且不依赖于Application,Activity or Fragment中的任何内容,那么最好的解决方案是使用object

object MyString {

    var myString: String = String()

    fun setMyStringData(str: String) {
        myString = str
    }

    fun getMyStringData(): String = myString

}

使用它是

MyString.setMyStringData("string")
MyString.getMyStringData()

这不会污染您的其他班级,您将达到自己的期望。 如果您需要任何课程的任何内容,则应在该课程中使用companion object

本文链接:https://www.f2er.com/3166946.html

大家都在问