我对Groovy非常陌生,我想从主groovy脚本中的另一个groovy脚本中导入一个类。我已经看到这个post了。但是,由于环境限制,我不能像GroovyClassLoader这样的函数,也不能导入任何libs/框架。我唯一的可能就是使用评估方法。
我试过这个:
主脚本(计算值不会抛出任何错误)
File csvFile = new File("./Csvreader.groovy");
evaluate(csvFile);Csvreader脚本
class CSVReader{
def csvFile = new File('./test.csv');
def separatorChar = ";"
def values = [];
def headers = [];
void setSeperator(String s){
if(s != ""){
separatorChar = s;
}
}
void readCsv(){
csvFile.eachLine{ line, number ->
if(number == 1){
def head = line.split(separatorChar);
for (entry in head) {
headers.add(entry);
}
} else{
def value = line.split(separatorChar);
def map =[:];
def i = 0;
for (entry in value) {
map.put(headers[i], entry);
i++;
}
values.add(map);
}
}
}
def getValues(){
return values;
}
def getHeaders(){
return headers;
}
def getSize(){
return values.size();
}
def getLine(def keyParam, def value){
for(int i = 0; i < values.size(); i++){
def line = values[i];
if(values[i][keyParam] == value){
return values[i];
}
}
}
}但是,我需要通过计算调用传递参数(并将方法移出类之外),或者需要创建类的实例。不幸的是,我真的不知道我怎么能做到这一点,有人有解决办法吗?
发布于 2021-05-20 14:23:42
您可以尝试在Csvreader.groovy文件的末尾放置表达式return CSVReader.class,该表达式将返回已编译的类。
然后,在调用方脚本中,您可以创建该类的实例,并将其用作任何其他类实例。
Csvreader.groovy
class CSVReader{
def separatorChar = ";"
void setSeparator(String s){
if(s != ""){
separatorChar = s;
}
}
}
return CSVReader.class调用方脚本
File csvFile = new File("./Csvreader.groovy")
def CSVReaderClass = evaluate(csvFile)
def cvsReader = CSVReaderClass.newInstance()
cvsReader.setSeparator("Z")
println cvsReader.separatorCharhttps://stackoverflow.com/questions/67618324
复制相似问题