草庐IT

lateinit

全部标签

android - lateinit 属性适配器尚未在 Kotlin4Android 中初始化

我在activity内的fragment中创建了RecyclerView,一切正常,但是当我执行notifyDataSetChanged()通过interface从activity到adapter,我得到一个错误“lateinitpropertyadapterhasnotbeen已初始化”,但我已经初始化了适配器classBuildingListFragment:Fragment(),MainActivity.EditInterface{lateinitvaradapter:BuildingListAdapterprivatevarmListener:OnFragmentInterac

如何使用Intellij(Kotlin)中的LateInit修饰符更改语法突出显示变量的规则?

Intellij亮点varmutableVariable:String带有下划线。Intellij还突出显示lateinitvarmutableVariable:String带有下划线。在实践中,我的后期var有效地不可变。我想强调var,但不是lateinitvar。Intellij支持此用例吗?看答案必须初始化非挂钩字段varmutableVariable:String=""这是有效的var意味着变量是可变的。你不能lateinitvallateinitvarmutableVariable:String

如何检查“lateinit”变量是否已初始化?

在Kotlin中,lateinit关键字用于在声明之后初始化的那些变量,或者我们可以说延迟初始化的变量称为lateinit变量。lateinit当开发人员确定变量在使用之前将被初始化时,使用该关键字。例如,可以通过依赖注入或在单元测试的设置方法中初始化属性。因此,在这些情况下,我们可以使用lateinit变量。但是在某些情况下,当您尝试访问未初始化的lateinit变量时,这反过来会导致以下错误:lateinitpropertyhasnotbeeninitialized因此,在Kotlin1.2版本中,对lateinit现在,您可以lateinit在使用方法之前检查变量是否已初始化isInit

lateinit property has not been initialized加载失败Android

本来我是想在onCreate之外使用swipeRefresh全局变量的,后面在调试的时候就出现了上述问题。重新看一了一遍,发现是用错语法了,lateinit是用在var修饰变量的,对val变量应该使用bylazy,所以对于控件类的变量应该使用bylazy并且是不可变的,下面这张图就是错误用法了:正确用法如下:valdrawerLayoutbylazy{findViewById(R.id.drawerLayout)}

安卓 Kotlin 测试。 lateinit 属性 _db 尚未初始化

我的代码:abstractclassDbTest{@Rule@JvmFieldvalcountingTaskExecutorRule=CountingTaskExecutorRule()privatelateinitvar_db:AppDatabasevaldb:AppDatabaseget()=_db@BeforefuninitDb(){_db=Room.inMemoryDatabaseBuilder(InstrumentationRegistry.getInstrumentation().context,AppDatabase::class.java).build()}@After

field - Kotlin - 如何从接口(interface)覆盖 "lateinit"var?

我有一个名为UserManager的界面interfaceUserManager{varuser:User/*...*/}还有一个名为UserManagerImpl的类,它实现了UserManagerclassUserManagerImpl:UserManager{overridevaruser:User//=mustprovideanUserobject/*...*/}这是我的问题:如何允许另一个类随时在UserManager()中设置User(即不提供初始User对象与属性声明并让另一个类创建并提供User实例)?算一算接口(interface)不能有lateinit属性我希望Us

field - Kotlin - 如何从接口(interface)覆盖 "lateinit"var?

我有一个名为UserManager的界面interfaceUserManager{varuser:User/*...*/}还有一个名为UserManagerImpl的类,它实现了UserManagerclassUserManagerImpl:UserManager{overridevaruser:User//=mustprovideanUserobject/*...*/}这是我的问题:如何允许另一个类随时在UserManager()中设置User(即不提供初始User对象与属性声明并让另一个类创建并提供User实例)?算一算接口(interface)不能有lateinit属性我希望Us

android - 如何在 Kotlin 中注入(inject)原始变量?

我在我的Android应用程序中使用Dagger2进行DI,使用此代码将类注入(inject)到我的Activity中很好:@field:[InjectApplicationContext]lateinitvarcontext:Context但是,Kotlin中的原始类型属性(例如Boolean)不允许使用lateinit修饰符,我该怎么做呢?@field:[InjectNamed("isDemo")]lateinitvarisDemo:Boolean当我从此代码中删除lateinit时,我收到此错误Dagger不支持注入(inject)私有(private)字段

android - 如何在 Kotlin 中注入(inject)原始变量?

我在我的Android应用程序中使用Dagger2进行DI,使用此代码将类注入(inject)到我的Activity中很好:@field:[InjectApplicationContext]lateinitvarcontext:Context但是,Kotlin中的原始类型属性(例如Boolean)不允许使用lateinit修饰符,我该怎么做呢?@field:[InjectNamed("isDemo")]lateinitvarisDemo:Boolean当我从此代码中删除lateinit时,我收到此错误Dagger不支持注入(inject)私有(private)字段

android-studio - 定义全局 android.widget var/val 时为 "lateinit"或 "by lazy"

定义全局android.widget变量时,例如TextView,是使用lateinit还是bylazy更可取?我最初认为使用bylazy会更好,因为它是不可变的,但我不完全确定。懒人示例:classMainActivity:AppCompatActivity(){valhelloWorldTextViewbylazy{findViewById(R.id.helloWorldTextView)asTextView}overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setCo