7

をキャッチまたはスローしないことについてコンパイラが警告しない理由がわかりません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();

4

1 に答える 1

13

android.database.SQLException実行時例外です。

Java では、実行時例外のスローをキャッチまたは宣言する必要はありません。ここRuntimeExceptionsでJavaでの詳細な説明を読んでください

于 2012-11-22T09:54:19.543 に答える