Я пытаюсь понять некоторый код Java, который по какой-то причине выполняет свой класс возвращаемого типа (класс SQLExecutionInfo) и ничего внутри метода.
Возможно, это просто, как работает 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).
Может ли кто-нибудь объяснить мне, почему это так?
Спасибо,
Pablo
Пожалуйста, позвольте мне предоставить больше информации:
Это меня озадачило,
Выполнение кода начинается здесь:
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 ????
Каким-то образом оно все еще достигает ТОЧКИ Б, и даже если я поставлю: Thread.dumpStack();
and new Error().printStackTrace();
в методе compileSingleQDB ничего не появляется.
Также, даже если я вырву внутренние компоненты метода compileSingleQDB и заменим его на:
protected Query.SQLExecutionInfo compileSingleQDB(StatementExpression statement, boolean keyNeeded) throws XQueryException, XMLDBCException {
return null;
}
строка jdbcExecInfo.sql все равно каким-то образом получает значение