我的代码中只有一个地方(AggregateFunctions)实例化了如下所示的对象。
private String selectColumns() {
String query = "SELECT ";
if (this.distinctResults) {
query = query + "DISTINCT ";
}
SelectColumn selectColumn = new SelectColumn(this);
if (!this.applyAggregation) {
for (Object object : this.columns) {
query = selectColumn.selectColumn(query, object);
}
} else {
AggregateFunctions aggregateFunctions = new AggregateFunctions(this);
query = query + aggregateFunctions.select();
}
//Remove extra ', '
query = query.substring(0, query.length() - 2) + " FROM ";
return query;
}
构造函数:
public AggregateFunctions(@NotNull SqlQueryGenerator sqlQueryGenerator) {
this.spaceEncloser = sqlQueryGenerator.getSpaceEncloser();
this.selectColumn = new SelectColumn(sqlQueryGenerator);
JSONObject formData = sqlQueryGenerator.getFormData();
this.columns = formData.getJSONArray("columns");
this.aggregateJson = formData.getJSONObject("functions").getJSONArray("aggregate");
this.aggregatesList = new ArrayList<Aggregate>();
prepareAggregates();
this.query = new StringBuilder();
}
public SelectColumn(SqlQueryGenerator sqlQueryGenerator) {
this.sqlQueryGenerator = sqlQueryGenerator;
}
但IntelliJ Code Analysis对递归调用进行了以下说明。基本上我不理解其含义。任何人都可以详细说明,帮助我理解吗?
问题简介
构造函数具有用法,但它们都属于递归调用链,没有可从入口点访问的成员。
问题解决
答案 0 :(得分:3)
这是来自未使用声明检查的警告。 IntelliJ IDEA认为无法从任何入口点访问构造函数。但是,构造函数并未使用,但是用法本身无法访问。
如果您的代码不是这种情况,则可能是IntelliJ IDEA中的错误。
答案 1 :(得分:0)
可能在您调用的代码中的AggregateFunctions的构造函数中,返回另一个类中的方法selectColumns()。这样一种复仇永远不会结束。
我的猜测是在这里
JSONObject formData = sqlQueryGenerator.getFormData();
或者在这里的某个地方:
this.selectColumn = new SelectColumn(sqlQueryGenerator);
你转到上一个类和创建新聚合门的相同方法,并且正在发生循环。
用这个调用AggregateFunction - 这是同一个对象。但是在构造函数中,您可以调用此方法。检查这些方法,如果其中任何一个方法有另一个AggregateFunction对象的创建 - 那就是你的问题。
答案 2 :(得分:0)
我遇到了这个问题,这是因为该对象没有在其他任何地方使用