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

如何在同伴对象外部检查它内部的lateinit var是否初始化[重复]

欧阳向文
2023-03-14
class MyClass
{
    companion object
    {
        lateinit var user:User
    }

    init
    {
        //initialize if not initialized
        //user.isInitialized
        user = User
    }
}

共有1个答案

姜泳
2023-03-14

只需使用一个可空变量

  1. 不安全方法(不安全的方式与lateinit相同):
class MyClass {
    companion object {
        val user get() = user_ ?: throw UninitializedPropertyAccessException("property has not been initialized")
        private var user_: User? = null
    }

    init {
        if (user_ == null) user_ = User()
    }
}

现在您可以访问该属性:

MyClass.user.example()
class MyClass {
    companion object {
        var user: User? = null; private set
    }

    init {
        if (user == null) user = User()
    }
}
MyClass.user?.example()
 类似资料:
  • 我想知道是否有一种方法可以检查变量是否已经初始化。例如:

  • 我想知道是否有办法检查变量是否已初始化。例如:

  • 我有一个抽象类及其具体子类,当我创建子类的对象时,它会自动调用超级构造函数。JVM是否在内部创建抽象类的对象? 那么在JVM中没有对象的情况下构造函数是如何存在的??(对于抽象类) 同样,构造函数在创建对象之后执行,然后不创建抽象类的对象,默认构造函数是如何执行的??(这在Java文档中有所提及)

  • 如何检查ArrayList中的值是否包含一组特定的字母? 比如如何检查值是否包含字符串“Axe”?

  • 问题内容: 虽然这两个给我相同的结果,但在内部或外部安装过滤器有什么区别?在表现或幕后动作方面是否有所不同? 问题答案: 在查询中过滤 Elasticsearch将以更有效的方式执行查询和过滤,以减少结果集并尽快获得答案。这称为filtered_query 查询后过滤 首先运行查询, 然后对 结果进行过滤, 然后 再将其返回给客户端。这称为post_filter。 尽管post_filter的效率

  • 问题内容: 我的Java应用程序使用两个线程。从历史上看,有同步方法和专用锁对象在使用。我需要知道当前线程是否具有锁,以及它是按方法还是按对象。我怎样才能做到这一点? 问题答案: 输入同步方法时,VM会在当前对象上设置锁定。因此,以下代码具有相同的效果: 这意味着同步方法与 您代码中的任何地方。 您可以用来检查线程是否持有特定的锁。这是示例代码: 从Java 1.5开始,该软件包支持诸如Reent