请注意:虽然这个问题提到了 Mongo,但本质上它肯定是一个纯粹的 Groovy 问题。
我的MyApp#bootstrap
方法:
def bootstrap(AppConfiguration config) {
String h = config.dbHost
String p = config.dbPort
println "Mongo is at: ${h}:${p}."
dao = new MongoDao(host: h, port: p)
}
我的 MongoDao
类(片段):
class MongoDao implements BasicDao {
String dbName
Mongo mongo
String host
String port
Morphia morphia
Datastore datastore
MongoDao(String host, String port) {
this.dbName = "db_myapp"
this.mongo = new Mongo(host, port)
this.morphia = new Morphia()
this.datastore = morphia.createDatastore(mongo, dbName)
morphia.mapPackage("myappdb.common")
}
}
当此 bootstrap()
方法运行时,我收到以下异常:
Mongo is at: mymongo01:27017.
Exception in thread "main" groovy.lang.GroovyRuntimeException: Could not find matching constructor for: com.me.myapp.dao.MongoDao(java.util.LinkedHashMap)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1601)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1404)
at org.codehaus.groovy.runtime.callsite.MetaClassConstructorSite.callConstructor(MetaClassConstructorSite.java:46)
这是怎么回事?为什么主机/端口会被读入并打印到 STDOUT 只是找到,但是当我们构造 DAO 时,它们会神奇地变成 LinkedHashMap
?
最佳答案
如果你想调用带有命名参数的构造函数,你的类还必须提供一个无参数构造函数。
就您而言,我会调用以下电话:
dao = new MongoDao( h, p )
因为这个构造函数正在做一些工作
关于mongodb - Groovy 找不到匹配的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25408641/