【发布时间】:2020-09-18 01:48:26
【问题描述】:
// 如何将下面的 java 查询放入 switch case?我正在使用 spring-mobile 项目,我需要将以下代码放入 switch 帮助中。
try {
if (device.isMobile()) {
redirectUri = cfg.getEmail().getVerification().getMobile_success_redirect_url();
}
} catch (Exception ex) {
redirectUri = cfg.getEmail().getVerification().getMobile_failure_redirect_url();
logger.error("Failed to verify email. Cause: {}", ex);
}
try {
if (device.isTablet()) {
redirectUri = cfg.getEmail().getVerification().getTablet_success_redirect_url();
}
} catch (Exception ex) {
redirectUri = cfg.getEmail().getVerification().getTablet_success_redirect_url();
logger.error("Failed to verify email. Cause: {}", ex);
}
try {
if (device.isNormal()) {
redirectUri = cfg.getEmail().getVerification().getWeb_success_redirect_url();
}
} catch (Exception ex) {
redirectUri = cfg.getEmail().getVerification().getWeb_failure_redirect_url();
logger.error("Failed to verify email. Cause: {}", ex);
}
response.sendRedirect(redirectUri);
【问题讨论】:
-
看起来不错。为什么要使用开关?
-
您可以在
Device类中使用枚举属性,而不是所有可以定义为enum DeviceType { MOBILE, TABLET, NORMAL}的布尔标志,然后为每种类型设置redirectUri映射可能才有意义。 (即使使用switch)。这意味着一个设备实体只有一种类型的设备是可行的。 -
在您的代码中,案例不是互斥的,因为即使一个测试成功,其他测试仍会执行,并且它们的子句可能会覆盖已经存在的结果。这不是开关的工作方式。但是如果你真的想要互斥行为,90% 的代码是多余的并且可以被删除,即使没有将
if语句更改为不同的语法结构。但是,有一点不清楚:当异常处理重复刚刚因异常而失败的操作时,它应该如何工作?
标签: java java-8 functional-programming switch-statement