m0s*_*it0 6 java android sqlexception
我不明白为什么编译器不会警告我不要捕捉或抛出一个SQLException.情况如下:
我已经定义了这个界面:
public interface GenericDatabaseManager {
public void createTables(DataBase model) throws SQLException;
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了这个实现给定接口的类:
public class SqliteHelper extends SQLiteOpenHelper implements
GenericDatabaseManager {
@Override
public void createTables(DataBase model) throws SQLException {
// Code that throws SQLException
}
Run Code Online (Sandbox Code Playgroud)
最后我从这里调用这个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...
}
}
Run Code Online (Sandbox Code Playgroud)
dbCoreModel.getManager()返回一个GenericDatabaseManager实例.但是编译器在线显示没有错误dbCoreModel.getManager().createTables(dbModel);,尽管这行抛出了SQLException.
有没有人知道为什么会这样?提前致谢.
编辑:关于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");
}
}
Run Code Online (Sandbox Code Playgroud)
i.throwsSQLException();在这种情况下,编译器会显示错误.
PC.*_*PC. 12
android.database.SQLException 是运行时异常.
在java中,没有必要捕获或声明运行时异常的抛出.RuntimeExceptions在这里阅读有关java 的详细说明
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |