在groovy脚本中引用静态变量时,如何纠正静态范围错误?

时间:2019-06-20 21:01:25

标签: groovy scope static

我有一个将excel工作表导出到csv的脚本,并且我试图转义逗号,引号等。我创建了一个静态方法,对要访问的单元格的值进行编码。此方法引用一个存储Pattern.compile()值的静态变量。

我尝试在方法中使用def rxquote,但这给了我一个不同的错误,指出在声明我的rxquote变量非法之前使用static修饰符。代码如下,其后是错误消息。

#!/usr/bin/env groovy
@Grab(group = 'org.apache.poi', module = 'poi', version = '4.1.0')
@Grab(group = 'org.apache.poi', module = 'poi-ooxml', version = '4.1.0')

import java.util.regex.*
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import org.apache.poi.ss.usermodel.*

static Pattern rxquote = Pattern.compile("\"")
static private String encodeValue(String value) {
    boolean needQuotes = false;
    if ( value.indexOf(',') != -1 || value.indexOf('"') != -1 ||
         value.indexOf('\n') != -1 || value.indexOf('\r') != -1 ){
        needQuotes = true;
    }
    Matcher m = rxquote.matcher(value)
    if ( m.find() ) {
        needQuotes = true
        value = m.replaceAll("\"\"")
    }
    if ( needQuotes ) {
        return "\"" + value + "\""
    } 
        else return value;
    }

//for(){
//   ... export csv code (which works on its own)
//}

编译错误消息:

Apparent variable 'rxquote' was found in a static scope but doesn't refer to a local variable, static field or class. Possible causes:
You attempted to reference a variable in the binding or an instance variable from a static context.
You misspelled a classname or statically imported field. Please check the spelling.
You attempted to use a method 'rxquote' but left out brackets in a place not allowed by the grammar.
 @ line 27, column 17.
       Matcher m = rxquote.matcher(value);
                   ^

我已经尝试研究此问题,并在这里找到了几个类似的问题,但据我所知,没有一种解决方案似乎适用于这种情况。我期望变量的静态声明可以避免此问题,但是似乎我缺少了一些东西。

1 个答案:

答案 0 :(得分:1)

您不能在groovy脚本中声明静态变量。

仅在groovy / java类中允许。

错误与情况不符。

应为:此处不允许使用修饰符“静态”。

作为静态变量的解决方法,您可以使用一些类:

class Const{
    static String bar = 'test'
}

static private String foo() {
    return Const.bar
}

foo()