0

私は、何らかの理由でその戻り値の型クラス (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 は何らかの形で値を取得します

4

2 に答える 2

3

あなたが投稿したコードは、動作を説明するには不十分です。ただし、タイプまたはクラスは「呼び出されない」ことに注意してください。printステートメントはコンストラクター内にあるため、のインスタンスがSQLExecutionInfoどこかに作成されているようです(いいえ、Javaはそれを自動的に行いません)。の最後のprintステートメントがcompileSingleQDB()実行されていないときにこれが発生すると、例外がスローされる、マルチスレッド化される、または単に間違ったコードになるなど、さまざまな原因が考えられます。

自分で問題を見つけるか、動作を再現できるように完全に投稿できるほど小さいバージョンになるまで、コードを減らして問題を特定してみてください。

于 2009-05-08T22:59:09.357 に答える
1

質問が編集された後、私の以前の回答は適用されませんでした。

私の推測では、このサンプルには関連するコードが欠落しています。

于 2009-05-08T22:40:43.677 に答える