mongodb - Groovy 找不到匹配的构造函数?

标签 mongodb syntax groovy runtimeexception morphia

请注意:虽然这个问题提到了 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/

相关文章:

MongoDb - 利用多 CPU 服务器进行写入繁重的应用程序

c++ - 在C++中,a = 5,a(5),a {5}和a [5]有什么区别?

java - 用 BufferedInputStream 包装 PipedInputStream

java - Java 脚本引擎中的字符串表达式插值支持

java - Play 1.2.4 : Rendering XML in template

php - 文档大小超过 32 MB 的 no-sql 数据库?

javascript - 在 Angular 2 应用程序中发出 REST Post 请求而不传递名称/Id

mongodb - 将图片保存到mongodb

c - 如何用逗号 (,) 分隔两个 C 语句?

vim 如何在没有语法高亮的情况下设置好索引?