相关疑难解决方法(0)

如何处理未经检查的异常?

我很难理解如何处理未经检查的异常.

如果方法没有声明异常并且我没有被强制处理它,我怎么知道该方法抛出异常?

未经检查的异常是针对编程错误的,正如我已经阅读过的,所以为了避免a NullPointerException,我会引入一个空检查.或者ArrayIndexOutOfBoundsException我会检查我如何访问数组.

但是当我不知道一个方法抛出一个自定义的未经检查的异常时,我该如何处理呢?

那么如何将异常从数据层传播到用户界面?那些必须检查例外,对吗?

我会让数据层抛出检查DataLayerExceptions然后在presenter类中有一个try-catch-block(假设我正在使用MVP)然后在catch-block中设置视图上的错误消息...

或者可以使用未经检查的例外来完成吗?

编辑

感谢到目前为止的回复.

这是我面临的一个具体例子.

我开始使用Spring,在一本书中我看到了一个UserRepository使用a JDBCTemplate从数据库中检索数据的类.在UserRepositoty一定程度上包含了这样的方法:

@Override
public List<User> findAll() {
    String sql = "select id, username, email, password from p_user";
    return new ArrayList<>(jdbcTemplate.query(sql, rowMapper));
}
Run Code Online (Sandbox Code Playgroud)

现在,jdbcTemplate的查询方法抛出a DataAccessException,这是一个运行时异常.

我知道这个,因为我查看了方法签名.

现在,我将如何处理此异常?当然,用户需要某种类型的反馈,以防出现问题.当然,我会记录异常.

但是我会在哪里捕获这个例外?

我应该在那里抓住它,然后重新抛出我自己的未经检查的异常吗?或者我应该DataAccessExceptionfindAll方法上声明一个抛出然后处理调用类中的异常(可能是某种服务或演示者)?

或者我应该确保抛出异常的条件永远不会发生(如果那些甚至可以被我控制)?

java exception

4
推荐指数
1
解决办法
3040
查看次数

SonarQube错误:重构此方法最多抛出一个已检查的异常

我正在使用SonarQube,它显示以下错误:

Public methods should throw at most one checked exception.

// Noncompliant
public void delete() throws IOException, SQLException { /* ... */ }

// Compliant
public void delete() throws SomeApplicationLevelException { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

这是否意味着,SomeApplicationLevelException是一个父类,IOException并且SQALException是从它派生出来的?我们应该抛出父类异常?从而坚持只抛出1个检查异常的方法?

因为我有2个例外,我已经定义了例如说Exception1Exception2扩展Exception.我的方法说,sampleMethod()抛出它们,即

public void sampleMethod() throws Exception1, Exception2 {
}
Run Code Online (Sandbox Code Playgroud)

这里显示错误.所以我应该有一个类作为父(说MainException),并获得Exception1Exception2从它扔父异常类?如下所示:

public void sampleMethod() throws MainException {
}
Run Code Online (Sandbox Code Playgroud)

以上解决方案是否合适?

java exception-handling sonarqube

4
推荐指数
2
解决办法
4558
查看次数

Kotlin 删除受检异常背后的想法是什么?

当我们在 Java 中调用抛出异常的方法时,我们如何处理这个问题?

我的代码在 kotlin 中,我使用的是用 Java 编写的第 3 方库。我调用了这个库的一个方法,在某些情况下它会抛出一些自定义异常。现在 kotlin 不强制我处理这个异常,在这种情况下应用程序会崩溃。处理这个问题的最佳方法是什么?

exception intellij-idea checked-exceptions kotlin

4
推荐指数
1
解决办法
533
查看次数

抛出异常可以很好地处理Java反射API中引发的所有异常吗?

我发现Java的反射API是异常冗长的,我经常想要捕获每个特定的异常,但只是抛出异常.这是不好的做法,还是你真的把所有这些例外都抛在了方法签名上?然后,调用该方法的每个方法都必须以某种方式处理每个特定的异常.相反,我正在考虑这样做:

public void someMethod()
        throws Exception {

    try {

        // do a bunch of reflection...

    } catch(ClassCastException classCastException) {

        throw new Exception("Some specific message.", classCastException);

    } catch(InvocationTargetException invocationTargetException) {

        throw new Exception("Some specific message.", invocationTargetException);

    }
}
Run Code Online (Sandbox Code Playgroud)

这种做法很糟糕吗?

java reflection exception-handling

2
推荐指数
2
解决办法
1253
查看次数

许多 unwrap() 的更干净的替代方案

以下代码_从文件夹中的 png 文件中删除该字符:

use std::fs;
use std::path::Path;

fn main() {
    let dir = Path::new("/home/alex/Desktop");
    for entry in fs::read_dir(dir).unwrap() {
        let entry = entry.unwrap();
        let path = entry.path();
        if path.is_file() && path.extension().unwrap() == "png" {
            let new_path = path.with_file_name(path.file_name().unwrap().to_str().unwrap().replace("_",""));
            fs::rename(path, new_path).unwrap();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,unwrap()它被大量使用。可以在这段代码中删除它们,并使用更干净的方法吗?

rust

1
推荐指数
1
解决办法
1173
查看次数

如何避免此SQL异常?

我有一个DBconnector类,我写过.这是使用它具有的插入查询方法的实例.暂时忽略查询:

ResultSet NewCustomer = db.executeInsert("SELECT s Bookings VALUES (surnameOut,'Nilsen', 'Johan', 'Bakken 2', 'Stavanger')");
Run Code Online (Sandbox Code Playgroud)

目前上面的行正在获得"未处理的异常类型SQLException"错误.它建议我用try/catch语句包围上面的内容,或者给出保持代码抛出异常的方法.我希望有一些方法可以在DBconnector类中对它进行排序,这样我就可以维护很小的单行来执行SQL查询.这可能吗?

以下是方法executeInsert方法的代码:

public ResultSet executeInsert(String query)throws SQLException {
        Statement s = null;
        ResultSet rs = null;
        try{
            s = con.createStatement();
            s.executeQuery(query);
            rs = s.getResultSet();
        }
        catch(SQLException e){}
        return rs;
    }
Run Code Online (Sandbox Code Playgroud)

java sql eclipse jdbc

0
推荐指数
1
解决办法
6937
查看次数