草庐IT

lateinit

全部标签

android - lateinit 的 isInitialized 属性在伴随对象中不起作用

我有一个单例类,我用Java方式实现了它:companionobject{@Volatileprivatelateinitvarinstance:TrapBridgefunbridge():TrapBridge{if(!this::instance.isInitialized){synchronized(this){if(!this::instance.isInitialized){instance=TrapBridge()}}}returninstance}}现在的问题是我不能使用isInitialized属性,因为它会抛出NoSuchFieldError异常:java.lang.N

android - Dagger2 + Kotlin : lateinit property has not been initialized

我正在尝试将ViewModelFactory注入(inject)到我的Activity中,但它一直抛出同样的错误:lateinit属性viewModelFactory尚未初始化。我找不到我可能做错了什么。从我的类(class)中查看上面的代码AppComponent.kt@Component(modules=[(AppModule::class),(NetworkModule::class),(MainModule::class)])interfaceAppComponent{funinject(application:TweetSentimentsApplication)funinj

java - 如何从 Java 中隐藏 Kotlin 的 lateinit var 支持字段?

在Kotlin中,假设我有课:classMyKotlinClass{lateinitvarfield:String}根据docs:Late-Initializedpropertiesarealsoexposedasfields.Thevisibilityofthefieldwillbethesameasthevisibilityoflateinitpropertysetter.我可以在java代码中使用myKotlinClass.field或myKotlinClass.getField()。我想禁用字段访问并仅通过getter和setter进行访问。我怎样才能做到这一点并保持latei

android - 未初始化的属性访问异常 : lateinit property pref has not been initialized

我知道有人回答了类似的问题Here.但那是由于黄油刀库问题,但我的情况不同。在我的情况下,当我在基本Activity中使用Dagger注入(inject)属性时,它会显示错误Causedby:kotlin.UninitializedPropertyAccessException:lateinitpropertyprefhasnotbeeninitialized但是当我在我的子Activity(登录Activity)中使用相同的属性时,它可以正常工作。例如。pref.setLanguage("abc")->它在登录Activity中工作正常,但在基本Activity中引发错误这是我的代码

android - Kotlin lateinit 属性,NPE 危险?

我正在使用lateinit属性以避免使用?运算符(operator)。我有很多View属性是第一次在getViews()函数中分配的。如果该功能不存在,我的应用程序将与来自Kotlin代码的NPE一起崩溃。在我看来,lateinit属性基本上破坏了该语言良好的null安全特性。我知道它们是在M13中引入的,因为它有更好的框架支持,但值得吗?或者我在这里遗漏了什么?代码如下:packagecom.attilapalfi.exceptional.uiimportandroid.os.Bundleimportandroid.support.v7.app.AppCompatActivityim

android - Kotlin - 如何在 "lateinit"和 "nullable variable"之间做出决定?

我对lateinit和可为空的变量感到困惑,哪一个用于变量。lateinitvarc:Stringvard:String?=nullc="UserDefinedTarget"//ifnotaddedinitialisationforcthanthrowsUninitializedPropertyAccessExceptionif(c=="UserDefinedTarget"){//dosomestuff.}//notthrowsanyexceptionwhetherdisinitialiseornot.if(d=="UserDefinedTarget"){//dosomestuff}

initialization - 为什么 Kotlin 不允许将 lateinit 与原始类型一起使用?

在Kotlin语言中,默认情况下,我们必须在引入每个变量时对其进行初始化。为了避免这种情况,可以使用lateinit关键字。在初始化之前引用lateinit变量会导致运行时异常。但是,lateinit不能与原始类型一起使用。为什么会这样? 最佳答案 对于(不可为空的)对象类型,Kotlin使用null值来标记lateinit属性尚未初始化,并在该属性时抛出相应的异常被访问。对于原始类型,没有这样的值,因此无法将属性标记为未初始化并提供lateinit需要提供的诊断。(我们可以尝试使用某种单独的标记,但是当通过反射初始化字段时,该标记

定义全局 android.widget var/val 时的 \\”lateinit\\” 或 \\”by lazy\\”

"lateinit"or"bylazy"whendefiningglobalandroid.widgetvar/val当定义一个全局android.widget变量时,例如TextView,使用lateinit还是bylazy更可取?我最初认为使用bylazy会是首选,因为它是不可变的,但我不完全bylazy示例:123456789101112131415classMainActivity:AppCompatActivity(){  valhelloWorldTextViewbylazy{findViewById(R.id.helloWorldTextView)asTextView}  ove

定义全局 android.widget var/val 时的 \\”lateinit\\” 或 \\”by lazy\\”

"lateinit"or"bylazy"whendefiningglobalandroid.widgetvar/val当定义一个全局android.widget变量时,例如TextView,使用lateinit还是bylazy更可取?我最初认为使用bylazy会是首选,因为它是不可变的,但我不完全bylazy示例:123456789101112131415classMainActivity:AppCompatActivity(){  valhelloWorldTextViewbylazy{findViewById(R.id.helloWorldTextView)asTextView}  ove