gpt4 book ai didi

android - 静态类型语言中的生命周期方法

转载 作者:行者123 更新时间:2023-11-28 09:36:31 26 4
gpt4 key购买 nike

在过去的一年里,我成为了一名移动开发人员和函数式编程的崇拜者。

在每个移动领域中,都有具有生命周期方法的组件,这些组件构成了应用程序的核心。下面以Android和Kotlin为例,iOS和Swift也一样。

在 Android 中,Activity 具有生命周期方法,例如 onCreate()。您还可以定义一个函数 onButtonClicked(),它将完全按照名称描述的方式执行操作。

为了问题的目的,假设在 onCreate() 中定义了一个变量,用于按钮单击处理程序 onButtonClickedPrintMessageLength()(This通常是这种情况 - onCreate() 本质上是 Activity 的设置方法)。

示例类如下所示:

class ExampleActivity: Activity() {
var savedStateMessage: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

savedStateMessage = "Hello World!"
}

fun onButtonClickedPrintMessageLength() {
System.out.println(savedStateMessage?.length)
}
}

请注意将 savedStateMessage 声明为 String?(可空字符串)并使用 ?.(空安全调用)。这些是必需的,因为编译器不能保证 onCreate() 将在 onButtonClickedPrintMessageLength() 之前被调用。尽管作为开发人员,we know that onCreate will always be called first * **

我的问题是我如何告诉编译器这些方法的保证顺序并消除空检查行为?

* 我想可以新建我们的ExampleActivity并直接调用onButtonClickedPrintMessageLength(),从而避开Android框架和生命周期方法,但是编译器/JVM 可能会在任何有趣的事情发生之前遇到错误。

** onCreate 首先被调用的保证由 Android 框架提供,它是一个外部真实来源,将来可能会中断/运行不同。不过,看到所有 Android 应用程序都基于这个真实来源,我相信信任是安全的。

最佳答案

虽然这不会回答您的实际问题,但在 Kotlin 中您可以使用 lateinit 告诉编译器您将在稍后的时间点初始化一个 var :

lateinit var savedStateMessage: String

如果您在初始化之前尝试使用此变量,您将得到一个非常具体的 UninitializedPropertyAccessException。此功能在 JUnit 等用例中很有用,在这些用例中,您通常会在 @Before 注释方法中初始化变量,而在 Android Activity 中,您无权访问到构造函数并在 onCreate() 中初始化内容。

关于android - 静态类型语言中的生命周期方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39321735/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com