使用 kotlin 创建数据库工厂
Creating a DB factory using 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 中的一种 工厂方法 。我似乎无法正确理解语法。
此外,这是否是数据库连接工厂的正确方法?
将所有内容移动到伴随对象,将连接 URI 传递给 getDatabase 方法。
伴随对象被编译为包含(外部 class)内的静态字段。由于该字段是静态的,它无法访问外部 class 的字段,因为外部 class 是一个实例。
我假设您想缓存数据库对象。
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
}
}
}
但是您不需要嵌套在其中包含 class 的伴生对象。
您可以改为创建一个对象。
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 的多个数据库,则将它们存储在散列中 table。
所以我正在尝试用 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 中的一种 工厂方法 。我似乎无法正确理解语法。
此外,这是否是数据库连接工厂的正确方法?
将所有内容移动到伴随对象,将连接 URI 传递给 getDatabase 方法。 伴随对象被编译为包含(外部 class)内的静态字段。由于该字段是静态的,它无法访问外部 class 的字段,因为外部 class 是一个实例。
我假设您想缓存数据库对象。
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
}
}
}
但是您不需要嵌套在其中包含 class 的伴生对象。 您可以改为创建一个对象。
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 的多个数据库,则将它们存储在散列中 table。