如何将不同的值传递给scala对象中的变量

时间:2016-06-24 06:21:23

标签: java mongodb scala scala-2.10 scala-2.11

我想在mongodb中创建不同的集合,因为我有一个scala对象类,这里是我的代码

object Factory {

val connectionMongo = MongoConnection(SERVER)
val collectionMongo = connectionMongo(DATABASE)("collectionA")

}

我想为我添加不同的集合名称,就像这样 这里的对象类是我的代码

    object Factory {

    var COLLECTIONName:String=""
    def setCollectionName(name:String)
    {
      COLLECTIONName=name
    }
    val connectionMongo = MongoConnection(SERVER)
    val collectionMongo = connectionMongo(DATABASE)(COLLECTIONName)

    }

class testA {

//getting collection object 
Factory.setCollectionName("collectionA")
collectionMongo.find()//fetching the record of collectionA

}

class testB {

//getting collection object 
Factory.setCollectionName("collectionB")
collectionMongo.find()//fetching the record of collectionB
}

但是这段代码没有按预期工作,它总是将COLLECTIONName值变为空字符串"" 请指导我在哪里做错了,请帮忙

2 个答案:

答案 0 :(得分:1)

你写过

val COLLECTIONName:String=""

然后你重新分配价值。 您不能在val中重新分配值,而不是使用var。 但这也是一个糟糕的方法。所以尝试修改代码,以便它必须以更加实用的方式编写。

修改后的代码类似于:

class Factory(connectionName:String) {
    val connectionMongo = MongoConnection(SERVER)
    val collectionMongo = connectionMongo(DATABASE)(connectionName)
}

class testA {
    //getting collection object 
    val factory=new Factory("collectionA")
    factory1.collectionMongo.find()//fetching the record of collectionA
}

class testB {
    //getting collection object 
    val factory=new Factory("collectionB")
    factory.collectionMongo.find()//fetching the record of collectionB
}

我不确定这是不是最好的方式,但它完全是一种更好的方式。

单身对象方法问:

object Factory {
    var connectionName:String=_
    val connectionMongo = MongoConnection(SERVER)
    def collectionMongo = connectionMongo(DATABASE)(connectionName)

    }

class testA {

//getting collection object 
 Factory.connectionName="collectionA"
Factory.collectionMongo.find()//fetching the record of collectionA

}

class testB {

//getting collection object 
 Factory.connectionName="collectionB"
Factory.collectionMongo.find()//fetching the record of collectionB
}

我希望有所帮助!

答案 1 :(得分:1)

这是典型的工厂模式,您可以将collectionMongo从val更改为这样的函数

object Factory {
    val SERVER = "<some server>"
    val DATABASE = "<some database>"
    val connectionMongo = MongoConnection(SERVER)(DATABASE)
    def getCollection(name: String) = connectionMongo(name)
}

用法

class testA {
    val collectionA = Factory.getCollection(nameA)
}

class testB {
    val collectionB = Factory.getCollection(nameB)
}