Java中的True-way解决方案:从2个字符串解析2个数字,然后返回它们的总和

相当愚蠢的问题。给定代码:

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()签名的一部分。此外,根据我的理解,未经检查的异常的想法只是表示程序的实现是不正确的,甚至更多,捕捉未检查的异常是一个坏主意,因为它像在运行时修复坏的程序。

请有人请澄清:

>我应该指定NumberFormatException作为方法签名的一部分。
>我应该定义自己的检查异常(BadDataException),处理NumberFormatException里面的方法和重新抛出它作为BadDataException。
>我应该定义自己的检查异常(BadDataException),验证两个字符串一些方式像正则表达式和抛出我的BadDataException如果不匹配。
>你的想法?

更新:

想象一下,它不是一个开源框架,你应该使用某种原因。你看看方法的签名,认为 – “好吧,它永远不会抛出”。然后,有一天,你有一个例外。是正常吗?

更新2:

有一些意见说我的总和(字符串,字符串)是一个坏的设计。我绝对同意,但对于那些相信原来的问题只会永远不会出现,如果我们有良好的设计,这里有一个额外的问题:

问题定义是这样的:你有一个数据源,其中数字存储为字符串。这个源可以是XML文件,网页,桌面窗口有2个编辑框,无论什么。

你的目标是实现采取这两个字符串的逻辑,将它们转换为int并显示消息框,说“总和是xxx”。

无论你使用什么方法来设计/实现这个,你将有这2点的内部功能:

>一个将String转换为int的地方
>添加2个int的地方

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

Integer.parseInt()需要传递正确的字符串。每当你传递一个错误的字符串,这意味着你的程序是不正确的(不是“你的用户是一个白痴”)。你需要实现这段代码,一方面你有带有MUST语义的Integer.parseInt(),另一方面你需要在输入不正确的情况下OK – SHOULD语义。

所以,简要地说:如果我只有MUST库,我如何实现SHOULD语义。

这是一个很好的问题。我希望更多的人会想到这样的事情。

IMHO,抛出未经检查的异常是可以接受的,如果你已经通过垃圾参数。

一般来说,你不应该抛出BadDataException,因为你不应该使用Exceptions来控制程序流。例外是例外。如果它们的字符串是数字,则调用方法的调用者可以知道它们是否为数字,因此传递rubbish是可以避免的,因此可以被认为是一个编程错误,这意味着抛出未检查的异常是可以的。

关于声明throws NumberFormatException – 这不是有用的,因为很少会注意到,由于NumberFormatException未被选中。但是,IDE可以使用它,并提供正确换行try / catch。一个好的选择是使用javadoc,例如:

/**
 * Adds two string numbers
 * @param a
 * @param b
 * @return
 * @throws NumberFormatException if either of a or b is not an integer
 */
public static int sum(String a, String b) throws NumberFormatException {
    int x = Integer.parseInt(a); 
    int y = Integer.parseInt(b); 
    return x + y;
}

已编辑:
评论者提出了有效的观点。你需要考虑这将如何使用和你的应用程序的整体设计。

如果该方法将在所有地方使用,并且所有调用方处理问题很重要,那么将该方法声明为抛出一个检查异常(强制调用方处理问题),但是使用try / catch块来混乱代码。

如果另一方面,我们使用这个方法与我们信任的数据,然后声明它如上,因为它不会预期会爆炸,你避免代码杂乱的本质上不必要的try / catch块。

http://stackoverflow.com/questions/7189520/true-way-solution-in-java-parse-2-numbers-from-2-strings-and-then-return-their

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Java中的True-way解决方案:从2个字符串解析2个数字,然后返回它们的总和