当前位置: 首页 > 知识库问答 >
问题:

如何在静态编程语言中初始化具有未知类型的属性?

白祺然
2023-03-14

我是Kotlin的初学者,我实际上正在Kotlin中做一个Androïd应用程序。我必须初始化一些值未知的属性(它不是,但从现在开始很难定义),所以我想像在TypeScript中一样,例如:公共startDate:any;这意味着startDate的类型可以是任何东西(它不受保护,但它有助于获得值,而不是关于发生了什么)。

有没有办法在科特林做到这一点?我试过了或者如列表中的*

感谢您的阅读!

共有3个答案

谭光辉
2023-03-14

如前所述,您应该使用任意类型。根据需要,使用val或var(val vs var)

    var myVal : Any

如果您的变量也可以是null us

    var myVar: Any?
    val myVal : Any?

您还需要将变量抽象或声明稍后将对其进行初始化lateinit仅对var有效,而abstract适用于val和var

    lateinit var myVar: Any
    abstract val myVal : Any

别忘了检查<code>lateinit var

if (::myVar.isInitialized) {
    //use myVar
}

更多关于任何类型的

空安全

丁均
2023-03-14

就像java中的基类一样,你可以在kotlin中使用任何。

双浩涆
2023-03-14

如果属性可以包含任何对象(但不能包含< code>null,这意味着它必须立即初始化),请使用类型< code>Any。

使用类型<代码>任意如果属性可以包含任何对象或<code>null。这相当于Java的对象类型。

从设计的角度来看,如果你知道实际的类型,并能利用Kotlin的强类型系统,那当然更好。如果您或您的团队正在定义类型,您可能会约束它们实现某个特定的接口,这样您就不会给它分配任意的值。稍后,当重构应用程序时,您可以移除该接口,并且将收到所有出现的编译错误,迫使您正确地修复它。

 类似资料:
  • 我刚刚开始用Kotlin来试验Android应用程序。我只想像这样继承应用程序类: 但编译器提出了警告: 建议将其改为: 我在文档中读到了主构造函数和辅助构造函数。所以如果超级类有一个主构造函数,那么有必要在这里写吗?就像应用程序类有自己的构造函数一样 那么就有必要为派生的?或者我不能像Java那样做: 或者这个错误暗示了别的什么?有人能详细解释一下吗?我对这门语言非常陌生,这对我来说看起来很奇怪

  • 是否有可能在Kotlin 属性初始化之前从其获取< code>::class.java? 从逻辑上讲,它应该可以工作——我试图获取一个类而不是一个值,但实际上它在未初始化的属性访问异常时失败。 请注意,我试图获取类的属性位于泛型类中,其类型是泛型参数之一: 我需要这个类来创建的实例 当然,我不能做到: 对此有什么解决办法吗?

  • 我正在使用KotlinPoet和Auto Service自动生成代码。我没有找到任何方法来知道带注释的类是否具有“内部”修饰符,因此我可以使用相同的修饰符创建另一个类。例如: 所以我想使用静态编程语言反射我将能够得到这些信息,但没有运气。 关于如何做到这一点的任何线索?

  • 在使用Kotlin的微文件/Quarkus项目中,有一个带有Instant类型变量的数据类。 问题是,生成的openapi模式并不表示Instant的值实际上是如何传输的。 模式如下所示,而它仅表示为这样的字符串:

  • 我正在尝试使用MapBox获取android中的用户位置。我的地图是碎片。这就是我初始化它的方式。 当我尝试调用enableLocationComponent(it)时,应用程序正在崩溃。通常,当我从onMapReady()调用它时,它工作正常。但这是另一种情况。我真的不知道把enableLocationComponent(it)放在哪里

  • 这不是重复。“object”表达式是关键字。 我正在尝试将Timber Android库与 https://github.com/orhanobut/logger 集成,我需要一个自定义的LogStrategyTimber来满足我的需求。 我想出了这个逻辑。但是我在初始化遇到了困难 customLogStrategyForTimber从未初始化。有更好的方法来实现这个逻辑吗?尝试在第一个overr