gpt4 book ai didi

java - 如何在仅具有静态函数的类中初始化时捕获错误

转载 作者:行者123 更新时间:2023-11-29 07:31:26 26 4
gpt4 key购买 nike

我想创建一个只有静态函数的类。我还需要在调用类函数之前初始化某些变量。因为我只使用静态函数,所以我不能使用构造函数来完成它。

所以现在当我尝试以下列方式设置 SSLContext 时,我得到一个错误:未处理的异常类型 NoSuchAlgorithmException。我应该如何处理这个问题?我可以在 setContext 函数中放置一个 try catch 并将值设置为 null,以防出现错误。如果我在某处注意到上下文变量为空,我就会从我的一个函数中抛出错误。

public class HTTPRequest {
private static SSLContext context = setContext();
private static SSLContext setContext() throws NoSuchAlgorithmException {
return SSLContext.getInstance("TLSv1.2");
}
}

特别是在编写 JUnit 测试用例时这会产生什么影响:假设说,在测试时我想通过我的模拟算法?通常我会通过构造函数设置这些值。通过以下方式: HTTPRequest(String algo) { context =SSLContext.getInstance(algo); 但现在我不能这样做了,对吧?

最佳答案

I can put a try catch in the setContext function and set the value to null, incase of an error. And if I notice somewhere that the context variable is null, I throw an error from one of my functions.

遇到异常应第一时间处理。如果您忘记在任何地方处理它,这可以避免副作用。

So now when I try to set the SSLContext in the following manner I get an error: Unhandled exception type NoSuchAlgorithmException. How should I approach this?

您有三种处理问题的方法:

  • 如果异常应该停止处理并且当 NoSuchAlgorithmException 被抛出时您应该显示或执行特定处理,您应该捕获异常并抛出自定义 RuntimeException,例如 NoSuchAlgorithmRunTimeException:

    尝试{
    返回 SSLContext.getInstance("TLSv1.2");
    } catch (NoSuchAlgorithmException e){
    抛出新的 NoSuchAlgorithmRunTimeException(e);
    }

通过这种方式,您知道如何从调用方处理它。您只需要捕获 NoSuchAlgorithmRunTimeException

  • 如果在抛出 NoSuchAlgorithmException 时异常应该停止处理并且您不应该执行特定的处理,那么按照 Kayaman 的建议抛出一个通用的RuntimeException 就足够了:

    尝试{
    返回 SSLContext.getInstance("TLSv1.2");
    } catch (NoSuchAlgorithmException e){
    抛出新的 RuntimeException(e);
    }

  • 如果应该忽略异常,因为异常不应阻止应用程序继续工作,只需捕获它并以您认为正确的日志级别记录。

    尝试{
    返回 SSLContext.getInstance("TLSv1.2");
    } catch (NoSuchAlgorithmException e){
    LOGGER.error("初始化错误",e);
    }

关于java - 如何在仅具有静态函数的类中初始化时捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41622833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com