我不明白为什么编译器没有警告我不要捕获或抛出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
.
有谁知道为什么会这样?提前致谢。
编辑: aboutSQLException
不需要被抓住,因为它是一个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();
在这种情况下,编译器会显示错误。