java - Java中的真道解决方案: parse 2 numbers from 2 strings and then return their sum

标签 java parsing exception

给定代码:

public static int sum(String a, String b) /* throws? WHAT? */ {
  int x = Integer.parseInt(a); // throws NumberFormatException
  int y = Integer.parseInt(b); // throws NumberFormatException
  return x + y;
}

你能判断它是否是好的 Java 吗?我在说的是,NumberFormatException是未经检查的异常。您不必将其指定为 sum() 的一部分签名。此外,据我了解,未经检查的异常的想法只是表明程序的实现不正确,更重要的是,捕获未经检查的异常是一个坏主意,因为它就像 在运行时修复坏程序 .

有人请澄清一下:

  1. 我应该指定 NumberFormatException作为方法签名的一部分。
  2. 我应该定义我自己的检查异常( BadDataException ),处理 NumberFormatException在方法内部并将其重新抛出为BadDataException .
  3. 我应该定义我自己的已检查异常 (BadDataException),以某种方式像正则表达式一样验证两个字符串,然后抛出我的 BadDataException如果不匹配。
  4. 你的想法?

更新:

想象一下,它不是一个开源框架,你应该出于某种原因使用它。您查看方法的签名并认为 - “好的,它永远不会抛出”。然后,有一天,你遇到了一个异常(exception)。正常吗?

更新 2:

有些评论说我的sum(String, String)是一个糟糕的设计。我完全同意,但是对于那些认为如果我们有好的设计就不会出现原始问题的人,这里有一个额外的问题:

问题定义如下:您有一个数据源,其中数字存储为 String s。这个来源可能是 XML 文件、网页、带有 2 个编辑框的桌面窗口等等。

您的目标是实现采用这 2 个 String 的逻辑s,将它们转换为 int s 并显示消息框说“总和是 xxx”。

无论您使用什么方法来设计/实现它,您都将拥有这 2 点内部功能:

  1. 你转换的地方Stringint
  2. 你加2的地方int s

我原来的帖子的主要问题是:

Integer.parseInt()期望 正确 字符串被传递。每当你传递一个错误的字符串,就意味着你的程序不正确(不是“你的用户是个白痴”)。你需要实现一段代码,一方面你有 Integer.parseInt() 和 MUST 语义,另一方面你需要在输入不正确的情况下正常 - 应该语义

简单地说:如果我只有MUST 库,我该如何实现应该语义

最佳答案

在我看来,最好尽可能地处理异常逻辑。因此我更喜欢签名

 public static int sum(int a, int b);

有了你的方法签名,我不会改变任何东西。要么你是

  • 以编程方式使用不正确的值,您可以在其中验证您的生产者算法
  • 或从例如用户输入发送值,在这种情况下,该模块应执行验证

因此,这种情况下的异常处理成为文档问题。

关于java - Java中的真道解决方案: parse 2 numbers from 2 strings and then return their sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7189520/

相关文章:

即使字符串和哈希码不同,Java Hashtable .containsKey(String key) 也会返回 true ...如何?

java - java中数组的转换

javascript - JS 上的 JSON 回复解析

c++ - 我该如何解决? libc++abi.dylib:以 std::invalid_argument 类型的未捕获异常终止:stoi:无转换

java - ActionListener 类中的哈希字符串 (SHA-256)

java - 如何更新 MySQL 中的多个列(通过 Java)?

java - 使用Eclipse调试时如何找到调用者方法

Android动态显示图像

html - 使用 XML 解析器解析 html 文档

postgresql - Postgres 异常