问题标签 [kotlin-lateinit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1263 浏览

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

假设在 Kotlin 中,我有课:

根据文档

Late-Initialized 属性也作为字段公开。该字段的可见性将与 lateinit 属性设置器的可见性相同。

我可以在java代码中使用myKotlinClass.fieldmyKotlinClass.getField(). 我想禁用字段访问并仅通过gettersetter访问。

我怎样才能做到这一点并保持lateinit修饰符?

0 投票
1 回答
204 浏览

database - 启动时具有参数化初始化的单例数据库对象?

我正在尝试创建一个可供多个类使用的单个数据库实例(object在 Kotlin 中使用关键字)。但是,我希望能够在创建单例实例之前指定数据库名称。

由于无法使用参数初始化单例对象,我想知道我正在做的事情是否有效,或者是否有更好的做事方式:

在另一个文件中

基本上,我在单例对象中封装了一个“数据库容器”,方法是对数据库容器使用延迟初始化,并提供用于指定数据库名称的 lateinit 变量,并在单例对象中使用初始化函数来初始化数据库容器。这样一来,当我第一次启动应用程序时,在我的 main 方法中,我可以从一些本地属性文件中加载数据库名称并调用val database = DatabaseSingleton.init("DATABASE_NAME", client)以创建需要由多个其他类访问的数据库单例。

这是做我想做的事的好方法,还是有更好的做事方法?

0 投票
2 回答
4822 浏览

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

我在我的 Android 应用程序中将 Dagger2 用于 DI,并且使用此代码将类注入到我的 Activity 中很好:

但是,lateinitKotlin 中的原始类型属性不允许使用修饰符(例如Boolean),我该怎么做这样的事情?

lateinit当我从此代码中删除时,我收到此错误Dagger does not support injection into private fields

0 投票
3 回答
9714 浏览

field - Kotlin - How to make field read-only for external classes

I have the following Kotlin class on Android:

Now, any external class can get the INetwork reference by simply doing:

However, that also makes it possible for an external class to overwrite that value:

I want to avoid the second option. Unfortunately, I can't make the field val because its initialization needs to happen inside the onCreate callback.

I also thought about making the field private and exposing it through a function, like this:

However, whoever calls getNetwork() can still assign a new value to it, like so:

How can I make the network field to be read-only by external classes? Or even better, is there a way to make it val even though I can't initialize it inside a constructor?

0 投票
3 回答
9107 浏览

spring - 带有 Spring DI 的 Kotlin:lateinit 属性尚未初始化

我没有在 Kotlin 中获得基于 Spring 的 setter 依赖注入工作,因为它总是以错误消息“lateinit property api has not been initialized”终止。我可以将问题简化为以下场景:有一个接口

这是由

我想在另一个应该发生依赖注入的类中使用实现:

但是,应用程序终止并显示上述错误消息。我的 Spring 配置如下所示:

在主函数中,我加载应用程序上下文并调用方法:

这里有什么问题?

0 投票
2 回答
2281 浏览

java - kotlin 中的 lateinit、惰性和单例模式

我正在尝试将我的项目的某些部分javakotlin. 其中之一是单例管理器类。java类看起来像这样

另外,我将.kt 反编译回java。在伴随类中,我得到以下代码。

}

1) 如何通过在 kotlin 伴随对象中使用 lateinit 或lazy 来实现线程安全、单例?如我所见,反编译的 java 代码在初始化函数中有一个同步调用,但在同步主体中没有任何内容。

2)我认为 kotlin object/lazy 带有线程安全保证,我如何在双重检查锁定模式中利用它?

3)有比双重检查锁定模式更好的模式吗?假设构造函数确实需要参数。

4)由于我试图使将此管理器类转换为 kotlin 文件的影响尽可能小(此管理器​​文件应该与其余的 java 代码一起使用),最好的方法是什么?我确实注意到我必须在伴随对象内添加@Jvmstatic或添加@Jvmfield一些其他变量或函数,这样我就不必更新在管理器中调用这些静态字段的其他 java 文件。

5)另外的问题,如果这个管理器现在在纯 kotlin 环境中工作,实现具有多个参数的单例类的最佳实践是什么?

0 投票
1 回答
767 浏览

android - 如何使用自定义类对象正确实现 lateinit 以在 android 中的 onCreate() 中使用避免“预期的属性获取器或设置器”错误

我正在尝试使用 Kotlin 将 Dialogflow(以前的 api.ai)代理与我的 Android 应用程序集成。我查看了关于 kotlin 的其他问答lateinit,Android 中的 onCreate() 生命周期非常适合后期初始化实现,以避免在 Kotlin 中使用空对象和相应!!的访问编写脏代码。?但是我在尝试自定义类的实例时遇到了“ Property getter or setter expected ”的错误。lateinint这是代码:

这给了我“预期的属性获取器或设置器”的错误lateinit settingsManager。这是SettingsManager定义:

那么这样做的正确方法是什么?我需要对 SettingsManager 类进行一些更改吗?请清楚地解释整个概念。

0 投票
3 回答
12894 浏览

java - isInitialized - lateinit var 的支持字段此时不可访问

我正在尝试检查lateinit属性是否已初始化。
在 Kotlin 1.2 中,我们现在有了这样的isInitialized方法。当我在声明了 lateinit 属性的类中这样做时,它会起作用。但是当我尝试从另一个类中调用它时,我收到以下警告:

'lateinit var foo: Bar' 的支持字段此时不可访问

我的模型类(比方说Person)是用 Java 编写的
另外两个类(比方说Test1Test2)是用 Kotlin 编写的

例子:

-

有机会让这个工作吗?

我目前的解决方法是在 Test1 中创建一个isInitializedperson属性返回的方法。

0 投票
2 回答
897 浏览

kotlin - 在初始化 lateinit var 时通知 (Kotlin)

这是一个直截了当的问题,但我找不到答案。lateinit var在 Kotlin 中初始化a 时有没有办法得到通知?

我知道我可以检查它是否已被初始化,this::coolvar.isInitialized但这不一样。

谢谢

0 投票
1 回答
8947 浏览

android - 无法从 Kotlin 1.2.10 解析 lateinitVar 以使用 isInitialized

我想使用这个功能

示例中最简单的方法对我不起作用:

但我越来越

我在 Android-Studio 中通过 gradle 使用 Kotlin 1.2.10(也安装了 Kotlin 1.2.10 插件)