【问题标题】:MissingMethodException when passing an implementing class instead of an interface传递实现类而不是接口时的 MissingMethodException
【发布时间】:2022-01-06 14:32:46
【问题描述】:

我正在开发一个关于 Jira 工作流的脚本(使用 Adaptavist Scriptrunner v.6.34),我遇到了一个问题,即 groovy 不接受接口实现作为其签名允许实现接口的函数的参数。

代码

import com.atlassian.jira.issue.link.DefaultRemoteIssueLinkManager;

(...)

def remoteLink = DefaultRemoteIssueLinkManager.getRemoteIssueLinksForIssue(issue)

issuecom.atlassian.jira.issue.IssueImpl 类型的构建变量)

会发生什么

groovy.lang.MissingMethodException: No signature of method: static com.atlassian.jira.issue.link.DefaultRemoteIssueLinkManager.getRemoteIssueLinksForIssue() is applicable for argument types: (com.atlassian.jira.issue.IssueImpl) values: [ADA-24684]
Possible solutions: getRemoteIssueLinksForIssue(com.atlassian.jira.issue.Issue)
    at Script6.run(Script6.groovy:32)
  • 方法文档是here
  • 方法签名需要Issue(接口)类型的参数
  • 我传递的参数类型为IssueImpl

我不明白 groovy 怎么不接受接口实现。

到目前为止我尝试了什么

所有这些情况都返回了原始异常。

我已经打印了类的方法和接口,并且所有内容都与文档匹配,因此这里没有版本不匹配。

我不知道还能做什么,因为它超出了我的 java/groovy 知识。我问过哪些是 Java 专家的同事,他们没有找到这种行为的原因。有什么想法吗?

【问题讨论】:

    标签: inheritance groovy jira signature


    【解决方案1】:
    DefaultRemoteIssueLinkManager.getRemoteIssueLinksForIssue(issue)
    

    这是试图在 DefaultRemoteIssueLinkManager 类上调用名为 getRemoteIssueLinksForIssue 的静态方法。貌似没有这样的方法,你看到的错误和那个是一致的。

    您在docs.atlassian.com/software/jira/docs/api/8.19.0/com/atlassian/jira/issue/link/DefaultRemoteIssueLinkManager.html#getRemoteIssueLinksForIssue-com.atlassian.jira.issue.Issue- 链接的方法是实例方法,而不是静态方法。

    【讨论】:

    • “我询问了 Java 专家的同事,他们没有找到导致这种行为的原因。”询问他们上面的静态方法描述是否对他们有意义。如果他们是 Java 专家,我希望他们会。
    • 好的,你能告诉我文档上哪里有明确说明吗?或者,至少,静态方法的文档在哪里?
    • “好的,你能告诉我文档上哪里有明确的说明吗?” - 有点。默认的 javadoc 模板不会生成任何标记来表示成员是 not 静态的,因此在 javadoc 中缺少该成员是表示某事是实例方法的标准方式。例如,docs.atlassian.com/software/jira/docs/api/8.19.0/com/atlassian/… 表示该成员是static
    • “或者,至少,静态方法的文档在哪里?” - 据我所知,该类上没有具有该名称的静态方法,如果我对此正确,那么该静态方法没有任何文档。
    • 如果你运行像String.substring(4) 这样简单的东西,你会看到一个非常相似的错误信息。问题是您正在调用一个不存在的静态方法,但恰好与实例方法具有相同的名称。
    猜你喜欢
    • 2011-10-26
    • 2017-11-23
    • 1970-01-01
    • 2017-09-14
    • 2020-05-20
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多