当前位置:  开发笔记 > 编程语言 > 正文

Java在方法中发现了switch语句.该方法需要返回一些东西吗?

如何解决《Java在方法中发现了switch语句.该方法需要返回一些东西吗?》经验,为你挑选了1个好方法。

我正在阅读一些试图学习新语言的Java教科书,我遇到了这种方法.

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";
  }
}

此代码后面的语句说:

编译器将拒绝此代码,因为可以在不返回值的情况下到达末尾.

所以在Java中,我假设如果方法在方法名称之前有单词"String",它必须返回一个String吗?这个switch语句的问题是可能没有满足case语句条件而且执行只是从底层掉出来了?是否有必要将未标记为void的方法始终返回值?



1> Nathan Hughe..:

方法签名是一种契约,它指定它作为参数所采取的内容以及它有义务返回的内容.声明返回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传递给此方法,则很容易返回错误的月份.尽可能靠近源处理错误会使跟踪问题变得更加容易.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有