Tag: 单身

在启动时使用参数化初始化的单例数据库对象?

我试图创建一个可以被多个类使用的单个数据库实例(在Kotlin中使用object关键字)。 但是,我希望能够在创建单例实例之前指定数据库名称。 由于单例对象不能用参数初始化,所以我想知道我在做什么是有效的,或者是否有更好的方法来做事情: object DatabaseSingleton { private lateinit var databaseName: String private lateinit var mongoClient: MongoClient val database: DatabaseContainer by lazy { DatabaseContainer(databaseName, mongoClient) } fun init(databaseName: String, mongoClient: MongoClient): DatabaseSingleton { this.databaseName = databaseName this.mongoClient = mongoClient return this } } 并在另一个文件 class DatabaseContainer(databaseName: String, val mongoClient: MongoClient) { val db: MongoDatabase = mongoClient.getDatabase(databaseName) […]

Kotlin覆盖抽象的val行为,对象vs类

我刚开始使用并开始搞抽象类,重写val和singelton。 但是,我刚刚遇到一个非常奇怪的行为。 我的目标是要有一个抽象类,然后创建几个扩展抽象类的singelton。 因为我想要求某些variables,我创建了抽象的val,然后可以在子类中重写(而不是通过构造函数传递它们)。 所以我有四个class: 主要活动: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val instance = Instance() Log.d(“MainActivity”, “instance randObject: ${instance.randObject}”) Log.d(“MainActivity”, “instance randObject: ${instance.randObject.myProp}”) Log.d(“MainActivity”, “instance randObject: ${instance.randObject.myProp2}”) Log.d(“MainActivity”, “singleton randObject: ${Object.randObject}”) Log.d(“MainActivity”, “singleton randObject: ${Object.randObject.myProp}”) Log.d(“MainActivity”, “singleton randObject: ${Object.randObject.myProp2}”) } } 例如: class Instance: AClass(){ override val testString: […]

Kotlin属性与getter。 我可以不指定初始值吗?

我想创建一个单例类,但不幸的是,Android几乎所有东西都需要Context,所以我需要它创建一个实例。 所以我只是假设用户名为init() ,然后返回实例。 正如你在下面看到的那样,如果_instance为null,则会抛出exception,所以get方法不能返回null。 但Kotlin说我必须初始化instance 。 事情是,MyClass不能没有上下文创建。 所以我不想指定一个初始值。 我怎样才能做到这一点? companion object { protected var _instance:MyClass? = null; fun init(context:Context) { _instance = MyClass(context) } var instance:MyClass //<—This causes a compile error. get() { if(_instance==null) throw RuntimeException("Call init() first."); return _instance!!; } }

匕首注射不适用于Kotlin的“物体”

花了大量的时间想弄清楚为什么我的匕首注射不起作用, 我意识到Kotlin中的“对象”types是个问题。 以下行不通,注入的“财产”是空的。 object SomeSingleton { @Inject lateinit var property: Property init { DaggerGraphController.inject(this) } } 但是,下面的DID工作得很好: class NotSingleton { @Inject lateinit var property: Property init { DaggerGraphController.inject(this) } } 我试过谷歌,我试过文件,但我不能指出背后的原因。 另外请注意,我还没有尝试过这与JAVA,JAVA没有反正建立单身人士的概念。 这是为什么? 为什么一个科特林单身人士无法注射成员,但一个非单身人士课程可以?