下面的代码分析是什么意思?
What does the following code analysis mean?
我在我的代码 (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 代码分析对递归调用说了以下内容。基本上没看懂意思。谁能详细点帮我理解一下?
问题概要
Constructor has usage(s) but they all belong to recursive calls chain that has no members reachable from entry points.
问题解决
- 安全删除
- 注释掉
- 添加为入口点
可能在您调用的代码中 AggregateFunctions 的构造函数中,您返回到另一个 class 中的方法 selectColumns()。这样递归就永远不会结束。
我的猜测是这里
JSONObject formData = sqlQueryGenerator.getFormData();
或此处某处:
this.selectColumn = new SelectColumn(sqlQueryGenerator);
您转到上一个 class 并转到创建新聚合的相同方法,并且正在发生循环。
您使用 this 调用 AggregateFunction - 这是同一个对象。但是随后在构造函数中调用 this 的方法。检查这些方法,如果它们中的任何一个有另一个 AggregateFunction 对象的创建 - 这是你的问题。
这是来自 未使用声明 检查的警告。 IntelliJ IDEA 认为构造函数无法从任何入口点访问。然而,构造函数并非未使用,但用法本身是无法访问的。
如果您的代码不是这种情况,则可能是 IntelliJ IDEA 中的错误。
我遇到了这个问题,这是因为该对象没有在其他任何地方使用
我在我的代码 (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 代码分析对递归调用说了以下内容。基本上没看懂意思。谁能详细点帮我理解一下?
问题概要
Constructor has usage(s) but they all belong to recursive calls chain that has no members reachable from entry points.
问题解决
- 安全删除
- 注释掉
- 添加为入口点
可能在您调用的代码中 AggregateFunctions 的构造函数中,您返回到另一个 class 中的方法 selectColumns()。这样递归就永远不会结束。
我的猜测是这里
JSONObject formData = sqlQueryGenerator.getFormData();
或此处某处:
this.selectColumn = new SelectColumn(sqlQueryGenerator);
您转到上一个 class 并转到创建新聚合的相同方法,并且正在发生循环。
您使用 this 调用 AggregateFunction - 这是同一个对象。但是随后在构造函数中调用 this 的方法。检查这些方法,如果它们中的任何一个有另一个 AggregateFunction 对象的创建 - 这是你的问题。
这是来自 未使用声明 检查的警告。 IntelliJ IDEA 认为构造函数无法从任何入口点访问。然而,构造函数并非未使用,但用法本身是无法访问的。
如果您的代码不是这种情况,则可能是 IntelliJ IDEA 中的错误。
我遇到了这个问题,这是因为该对象没有在其他任何地方使用