使用kotlin创建一个数据库工厂

所以我正在尝试用kotlin创建一个MongoDB工厂…但是我想我并不是很了解companion object的概念,因为我甚至不能编译它:

 package org.jgmanzano.storage import com.mongodb.MongoClient import com.mongodb.MongoClientURI import com.mongodb.client.MongoDatabase class MongoConnectionFactory(private val connectionURI: String) { private var database: MongoDatabase init { val connectionString = MongoClientURI(connectionURI) val mongoClient = MongoClient(connectionString) database = mongoClient.getDatabase("paybotDB") } companion object { fun getDatabase() : MongoDatabase { return database } } } 

你们将如何实现这一目标? 我的想法是创建在Java中是一种工厂方法 。 我似乎无法得到正确的语法。

此外,这将是一个DB连接工厂的正确方法?

将所有内容移动到伴随对象,将连接URI传递给getDatabase方法。 伴随对象被编译为包含(外部类)内的静态字段。 由于该字段是静态的,所以它不能访问外部类的字段,因为外部类是一个实例。

我假设你想缓存数据库对象。

 class MongoConnectionFactory() { companion object { private var database: MongoDatabae? = null fun getDatabase(connectionURI: String) : MongoDatabase { if (database != null) { return database { val connectionString = MongoClientURI(connectionURI) val mongoClient = MongoClient(connectionString) database = mongoClient.getDatabase("paybotDB") return database } } } 

但是,你不需要嵌套在包含类的同伴对象。 你可以创建一个对象。

 object MongoConnectionFactory { private var database: MongoDatabae? = null fun getDatabase(connectionURI: String) : MongoDatabase { if (database != null) { return database { val connectionString = MongoClientURI(connectionURI) val mongoClient = MongoClient(connectionString) database = mongoClient.getDatabase("paybotDB") return database } } 

如果您需要具有不同连接URI的多个数据库,则将它们存储在散列表中。