标准类成员是不可见的 - “表达式类型是静态未知的”错误

时间:2013-04-09 07:48:18

标签: eclipse groovy

我在Eclipse中遇到许多标准groovy函数的Type of expression is statically unknown错误:

import groovy.util.slurpersupport.NodeChild
import groovy.xml.MarkupBuilder
import groovy.xml.StreamingMarkupBuilder
import groovy.xml.XmlUtil
import org.codehaus.groovy.tools.xml.DomToGroovy

...

                                   v- here
def xmlRequest= new XmlSlurper().parseText(templateString.trim())

def outputBuilder = new StreamingMarkupBuilder()
                    v- and here
fw<< outputBuilder.bind{ mkp.yield xmlRequest }

哦,是的,问题是 - 这是什么意思,拜托?谷歌并不广为人知这个错误。

错误是真实的,它不是在运行阶段自行解决的问题。相反,该项目将无法运行。 (这是一个测试并说:没有发现JUnit测试)

1 个答案:

答案 0 :(得分:3)

我认为 Tim Yates 在他的评论中是正确的。它似乎与类型推理有关。我猜您正在遇到此错误GRECLIPSE-1483字段初始值设定项不会对类型推理做出贡献

我做了一个小测试:

package test

import groovy.util.slurpersupport.NodeChild
import groovy.xml.MarkupBuilder
import groovy.xml.StreamingMarkupBuilder
import groovy.xml.XmlUtil
import org.codehaus.groovy.tools.xml.DomToGroovy

class SimpleTest {
    def templateString = '<test>testing</test>'

    def xmlRequest= new XmlSlurper().parseText(templateString.trim())
}

有了这个,trim()方法加下划线。激活 Groovy类型检查(右键单击文件 - &gt; Groovy类型检查 - &gt;类型检查),消息“表达式类型是静态未知:修剪”

更进一步,使用@TypeChecked

对课程进行分类
  • 此行有多个标记
    • Groovy:[静态类型检查] - 找不到匹配方法groovy.util.XmlSlurper #parseText(java.lang.Object)。请检查是否 声明的类型是正确的,如果方法存在。
    • Groovy:[静态类型检查] - 找不到匹配方法java.lang.Object#trim()。请检查声明的类型是否正确以及方法是否存在。
    • 表达式的类型是静态未知的:trim

但如果我将上面的代码包含在方法中,从而没有字段初始化器,则上述错误消失:

@TypeChecked
class SimpleTest {
    def test() {
        def templateString = '<test>testing</test>'
        def xmlRequest= new XmlSlurper().parseText(templateString.trim())
    }
}

如果没有@TypeChecked注释,“ Groovy类型检查”就不会出现此错误。