我在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测试)
答案 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
:
但如果我将上面的代码包含在方法中,从而没有字段初始化器,则上述错误消失:
@TypeChecked
class SimpleTest {
def test() {
def templateString = '<test>testing</test>'
def xmlRequest= new XmlSlurper().parseText(templateString.trim())
}
}
如果没有@TypeChecked
注释,“ Groovy类型检查”就不会出现此错误。