传递实现 class 而不是接口时出现 MissingMethodException
MissingMethodException when passing an implementing class instead of an interface
我正在 Jira 工作流上开发一个脚本(使用 Adaptavist Scriptrunner v.6.34),我遇到了一个问题,其中 groovy 不接受接口实现作为签名函数的参数允许实现的接口。
代码
import com.atlassian.jira.issue.link.DefaultRemoteIssueLinkManager;
(...)
def remoteLink = DefaultRemoteIssueLinkManager.getRemoteIssueLinksForIssue(issue)
(issue
是 com.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)
我不明白groovy怎么不接受接口实现。
到目前为止我尝试了什么
- 将我的变量转换为类型
Issue
- 将我的变量转换为类型
Issue
- 将我的变量转换为类型
MutableIssue
(the first-level inherited interface)
- 将我的变量转换为类型
MutableIssue
- 将我的变量转换为类型
AbstractIssue
(the first-level inherited class)
- 将我的变量转换为类型
AbstractIssue
所有这些情况都返回了原始异常。
我已经打印了 类 的方法和接口,一切都与文档相符,所以这里没有版本不匹配。
我不知道还能做什么,因为它超出了我 java/groovy 的知识范围。我问过 java 专家的同事,他们没有找到这种行为的原因。有什么想法吗?
DefaultRemoteIssueLinkManager.getRemoteIssueLinksForIssue(issue)
它试图在 DefaultRemoteIssueLinkManager
class 上调用名为 getRemoteIssueLinksForIssue
的静态方法。好像没有这样的方法,你看到的错误和那个是一致的。
您在 docs.atlassian.com/software/jira/docs/api/8.19.0/com/atlassian/jira/issue/link/DefaultRemoteIssueLinkManager.html#getRemoteIssueLinksForIssue-com.atlassian.jira.issue.Issue- 链接的方法是实例方法,不是静态方法。
我正在 Jira 工作流上开发一个脚本(使用 Adaptavist Scriptrunner v.6.34),我遇到了一个问题,其中 groovy 不接受接口实现作为签名函数的参数允许实现的接口。
代码
import com.atlassian.jira.issue.link.DefaultRemoteIssueLinkManager;
(...)
def remoteLink = DefaultRemoteIssueLinkManager.getRemoteIssueLinksForIssue(issue)
(issue
是 com.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)
我不明白groovy怎么不接受接口实现。
到目前为止我尝试了什么
- 将我的变量转换为类型
Issue
- 将我的变量转换为类型
Issue
- 将我的变量转换为类型
MutableIssue
(the first-level inherited interface) - 将我的变量转换为类型
MutableIssue
- 将我的变量转换为类型
AbstractIssue
(the first-level inherited class) - 将我的变量转换为类型
AbstractIssue
所有这些情况都返回了原始异常。
我已经打印了 类 的方法和接口,一切都与文档相符,所以这里没有版本不匹配。
我不知道还能做什么,因为它超出了我 java/groovy 的知识范围。我问过 java 专家的同事,他们没有找到这种行为的原因。有什么想法吗?
DefaultRemoteIssueLinkManager.getRemoteIssueLinksForIssue(issue)
它试图在 DefaultRemoteIssueLinkManager
class 上调用名为 getRemoteIssueLinksForIssue
的静态方法。好像没有这样的方法,你看到的错误和那个是一致的。
您在 docs.atlassian.com/software/jira/docs/api/8.19.0/com/atlassian/jira/issue/link/DefaultRemoteIssueLinkManager.html#getRemoteIssueLinksForIssue-com.atlassian.jira.issue.Issue- 链接的方法是实例方法,不是静态方法。