gpt4 book ai didi

java - 处理这些 if 子句的更简洁的方法?

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

我想知道处理这堆 if 子句的更简洁的方法是什么。作为附加信息,它是在 Spark Framework 研究项目中使用的异常处理程序。

这段代码完成了它的工作并且它是可读的,但可能的进一步扩展会将它变成一个怪物。您对重构它有什么建议吗?

    public ExceptionHandler<? super java.lang.Exception> handler() {
return (e, request, response) -> {
ErrorMessage error;

if (e instanceof SomeException1) {
response.status(422);
error = new ErrorMessage("message1", e.getMessage());
} else if (e instanceof SomeException2) {
response.status(404);
error = new ErrorMessage("message2", e.getMessage());
} else if (e instanceof SomeException3) {
response.status(500);
error = new ErrorMessage("message3", e.getMessage());
} else {
response.status(500);
error = new ErrorMessage("message4", e.getMessage());
}

[...]
};
}

编辑澄清:

这段代码是使用 Spark 的 exception() 方法在应用程序的主类中注册的异常处理程序方法的一部分。像这样:

public class MainClass {

public static void main(String[] args) {
//register the exception handler
exception(Exception.class, errorsHandler.handler()); //handler() is the method showed above.
}
}

最佳答案

避免长 if-/else 链的一个好方法是使用映射表。您可以使用 Map,将 Exception 类映射到状态代码。像这样:

private static Map<Class<?>, Integer> errorCodeMapping = new HashMap<>();

{
errorCodeMapping.put(SomeException.class, 422);
...
}

然后您的异常处理程序会将代码设置为

response.status(errorCodeMapping.get((e.getClass()));

异常类到错误消息的映射也可以这样做。通过这种方式,您还可以为新映射提供一个 setter ,而不必将其硬编码到 Handler 类本身。

关于java - 处理这些 if 子句的更简洁的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54551839/

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