private String monthName (int month) { // bad example since this method needs to return a String switch (month) { case 1: return "January"; case 2: return "February"; ... case 12: return "December"; } }
此代码后面的语句说:
The compiler will reject this code because it is possible to reach the
end with- out returning a value.
所以在Java中,我假设如果方法在方法名称之前有单词“String”,它必须返回一个String吗?这个switch语句的问题是可能没有满足case语句条件而且执行只是从底层掉出来了?是否有必要将未标记为void的方法始终返回值?
解决方法
具体来说,如果声明一个方法返回一个String,那么通过该方法获取的每个可能路径都必须以返回一个String结束,返回null(null是任何引用类型的允许值),或者抛出一个Throwable实例.这就是引用的段落告诉你的,编译器可以检测到你没有这样做并且会抱怨它.
如果传入的整数不在预期范围内,您可以在此处抛出异常.让你的方法验证他们正在为他们的参数接收合理的值是一件好事.使用默认值或返回null不是很好,因为它不会立即暴露问题,而是会给调用者提供一个可能没有意义的值,并且因为错误可见的地方可能会更难调试发生的事情.距离问题的起因还有很长的路要走.这种方法可以写成:
private String monthName (int month) { // bad example since this method needs to return a String switch (month) { case 1: return "January"; case 2: return "February"; ... case 12: return "December"; default: throw new IllegalArgumentException("found unexpected value " + month); } }
这样编译器就不会抱怨,任何超出范围的值都会引起你的注意.
意识到:
>许多人坚持认为所有开关都应包含默认情况,以便未处理的情况不会以无声的方式传递.> java.util日期/日历API编号从0开始的月份,而不是示例中的1;如果您使用日历查找月份并将该int传递给此方法,则很容易返回错误的月份.尽可能靠近源处理错误会使跟踪问题变得更加容易.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。