【问题标题】:No signature of method [] is applicable for argument types方法 [] 的签名不适用于参数类型
【发布时间】:2016-04-12 11:58:23
【问题描述】:

您好,我有这项服务:

def insertAction(int Id, String Name){
        def sql = new Sql(dataSource)
        sql.execute("INSERT INTO  mn (id, name) VALUES ($Id,$Name)")
    }

这个控制器:

def save() {
       println params
       [contact: contactListService.insertAction(params.id,params.Name)]
        redirect action: "create"

当我创建一个新条目时出现此错误

没有方法签名:contactlist.ContactListService.insertAction() 适用于参数类型:(null, java.lang.String) 值:[null, das] 可能的解决方案:insertAction(int, java.lang.String) , listAction()

【问题讨论】:

  • 变量名或参数不要使用大写字母

标签: postgresql grails groovy


【解决方案1】:

好吧,就像错误提示的那样。
您将第一个参数定义为int,但您将其指定为null
null 可以用于任何对象,但不能用于像int 这样的原始类型。 将您的方法参数更改为像 Integer 之类的对象(或 def 以不指定显式类型)并在您的方法中检查 null,或者在将其值提供给方法之前检查您的 params

【讨论】:

  • 好吧,我改变了一些东西,但现在我得到了这个没有方法签名:contactlist.ContactListService.insertAction() 适用于参数类型:(java.lang.String, java.lang.String) 值: [3, h] 可能的解决方案:insertAction(int, java.lang.String), listAction()
  • 好吧,还是和错误提示的一样。您已将方法定义为期望 intString,但您为其提供了两个 Strings。将您的第一个参数转换为 int,然后再将其提供给带有 params.id as int 的方法,或者将您的方法签名更改为 String, Stringdef, String
  • 我改变的是并得到了我期待的错误。 id 在我的数据库中是 bigint。错误:列“id”的类型为 bigint,但表达式的类型为字符变化提示:您需要重写或强制转换表达式。
  • $Id -> ${Id as long}
  • 修复了,谢谢。但我还是不明白为什么会这样
猜你喜欢
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多