私は、何らかの理由でその戻り値の型クラス (SQLExecutionInfo クラス) を実行しているように見えるいくつかの Java コードを理解しようとしていますが、メソッド内には何もありません。おそらく、これは単にJavaの仕組みです(つまり、メソッド本体内に何があるかどうかに関係なく、返されるクラスのタイプが最初に実行されます??)
メソッドは次のように始まります。
protected Query.SQLExecutionInfo compileSingleQDB(StatementExpression statement, boolean keyNeeded) throws StatementException, XMLDBCException {
//body of method
System.out.println("body of method");
}
/*****THE REFERENCED SQLExecutionInfo class is a subclassed within Query.java***********/
public static class SQLExecutionInfo {
public SqlExpression sql = null;
public StatementInfo sInfo = null;
public Mapper mapper = null;
public List childrenQueries = null;
public int[] idPosition = null;
public int idCount = -1;
public SQLExecutionInfo() {
}
public SQLExecutionInfo(SqlExpression sql, Mapper mapper) {
System.out.println("POINT ALPHA2:"+ sql);
this.sql = sql;
this.mapper = mapper;
}
何らかの理由で、compileSingleQDB メソッド (つまり本体) で何も実行されませんが、クラス SQLExecutionInfo が呼び出され、System.out.println("POINT ALPHA2:"+ sql) が呼び出されます。
これがなぜなのか、誰か説明してもらえますか?
ありがとう、パブロ
詳細情報を提供させてください:
これは私を困惑させました、
コードの実行はすべてここから始まります。
System.out.println("POINT SQL:"+jdbcExecInfo.sql); // Returns null at this stage
try {
System.out.println("POINT A");
jdbcExecInfo = compileSingleQDB(((Variable) Qdb.get(0)).getExpression(), false);
System.out.println("POINT B");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("POINT SQL:"+jdbcExecInfo.sql); // Somehow now has a value ????
どういうわけかそれはまだPOINT Bに達し、私が入れても:Thread.dumpStack();
and new Error().printStackTrace();
compileSingleQDB メソッド内では何も表示されません。
また、 compileSingleQDB メソッドの内部を取り出して、次のように置き換えても:
protected Query.SQLExecutionInfo compileSingleQDB(StatementExpression statement, boolean keyNeeded) throws XQueryException, XMLDBCException {
return null;
}
文字列 jdbcExecInfo.sql は何らかの形で値を取得します