Nie rozumiem, dlaczego kompilator nie ostrzega mnie o nie łapaniu lub rzucaniu SQLException
. Tutaj jest sytuacja:Brak błędu/ostrzeżenia kompilatora dla niezaakceptowania wyjątków catch/throwing
Mam zdefiniowane ten interfejs:
public interface GenericDatabaseManager {
public void createTables(DataBase model) throws SQLException;
}
Potem stworzył tę klasę, która implementuje dany interfejs:
public class SqliteHelper extends SQLiteOpenHelper implements
GenericDatabaseManager {
@Override
public void createTables(DataBase model) throws SQLException {
// Code that throws SQLException
}
iw końcu dzwonię to SqliteHelper.createTables () stąd:
public class DatabaseManager extends CoreModule {
private boolean createUpdateDB(final String dbString, final String appId) {
// Previous code...
if (oldVer == -1) {
dbCoreModel.addModel(dbModel);
dbCoreModel.getManager().createTables(dbModel);
return true;
}
// More code...
}
}
dbCoreModel.getManager()
zwraca GenericDatabaseManager
wystąpienie. Ale kompilator nie pokazuje żadnego błędu na linii dbCoreModel.getManager().createTables(dbModel);
, chociaż ta linia wyrzuca SQLException
.
Czy ktoś ma pojęcie o tym, dlaczego tak się dzieje? Z góry dziękuję.
EDIT: o SQLException
nie trzeba przechwytywać, ponieważ jest to RuntimeException
. This is not true. Oto przykład:
import java.sql.SQLException;
interface Interface {
public void throwsSQLException() throws SQLException;
}
class Test implements Interface {
@Override
public void throwsSQLException() throws SQLException {
throw new SQLException();
}
}
public class Main {
public static void main(String[] args) {
Interface i = new Test();
i.throwsSQLException();
System.out.println("Finished");
}
}
Kompilator nie pokazuje błąd w i.throwsSQLException();
w tym przypadku.
Bezużyteczne, aby zapytać, czy "Poprzedni kod ..." zawiera "try {" i "Więcej kodu ..." zawiera '} catch (SQLException e) {', right ? : D –
Tak, nie try/catch oczywiście – m0skit0
Następnie, jak PC. odpowiedziałeś, nie używasz 'java.sql.SQLException', ale' android.database.SQLException'. Sprawdź swoje 'import's. –