import java.util.ArrayList;
import java.util.List;
public class QueryParser {
QueryParameter queryParameter = new QueryParameter();
public static int flag = 0;
public QueryParameter parseQuery(String queryString) {
queryParameter.setGroupByFields(getGroupByFields(queryString));
queryParameter.setAggregateFunctions(getAggregateFunctions(queryString));
return queryParameter;
}
private List<AggregateFunction> getAggregateFunctions(String queryString) {
List<AggregateFunction> aggregateFunctionList = null;
AggregateFunction aggregateFunction;
if (queryString.contains("count") || queryString.contains("sum") || queryString.contains("min")
|| queryString.contains("max") || queryString.contains("avg")) {
flag = flag + 1;
}
return aggregateFunctionList;
}
private List<String> getGroupByFields(String queryString) {
List<String> groupByFieldList = null;
if (queryString.contains("group by")) {
flag = flag+2;
return groupByFieldList;
}
}
这是我的代码,现在我正在使用另一个类访问标志
int i = queryParser.flag
,
但它总是返回0.如何声明标志,以便它保存内部方法的值,也可以从其他类访问。 / *如果有人需要更多细节,请问我会添加更多细节,我还应该写些什么,我的主要疑问只是知道如何在另一堂课中使用我的旗帜,谢谢你耐心* /
答案 0 :(得分:-1)
MCVE可能如下所示:
public class QueryParser {
public static int flag = 0;
void getAggregateFunctions(String queryString) {
if (queryString.contains("count") || queryString.contains("sum") || queryString.contains("min")
|| queryString.contains("max") || queryString.contains("avg")) {
flag = flag + 1;
}
}
void getGroupByFields(String queryString) {
if (queryString.contains("group by")) {
flag = flag+2;
}
}
public static void main(String[] args) {
QueryParser q = new QueryParser();
System.out.println(flag); //prints out 0
q.getAggregateFunctions("max"); System.out.println(flag); //prints out 1
q.getAggregateFunctions("aString"); System.out.println(flag); //prints out 1
q.getAggregateFunctions("avgNumber"); System.out.println(flag); //prints out 2
q.getGroupByFields("group by"); System.out.println(flag); //prints out 4
}
}
它可以帮助那些想要帮助你的人,更重要的是:它是一个很棒的调试工具。
Make on帮助您隔离问题,并专注于它。
就像在这种情况下:你可以看到问题不在flag的声明中,也没有改变它的值,但可能与输入值有关。