をキャッチまたはスローしないことについてコンパイラが警告しない理由がわかりませんSQLException
。状況は次のとおりです。
このインターフェースを定義しました:
public interface GenericDatabaseManager {
public void createTables(DataBase model) throws SQLException;
}
次に、指定されたインターフェイスを実装するこのクラスを作成しました。
public class SqliteHelper extends SQLiteOpenHelper implements
GenericDatabaseManager {
@Override
public void createTables(DataBase model) throws SQLException {
// Code that throws SQLException
}
最後に、ここから SqliteHelper.createTables() を呼び出しています。
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()
インスタンスを返しGenericDatabaseManager
ます。ただし、dbCoreModel.getManager().createTables(dbModel);
この行はSQLException
.
なぜこれが起こっているのか、誰かが考えを持っていますか? 前もって感謝します。
EDIT : aboutは .SQLException
であるため、キャッチする必要はありませんRuntimeException
。これは正しくありません。次に例を示します。
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");
}
}
この場合、コンパイラはエラーを表示しますi.throwsSQLException();
。