根据密码:
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 :
有一些评论说我的 sum(String, String)
是一个糟糕的设计。我完全同意,但是对于那些相信如果我们有好的设计原始问题就不会出现的人,这里有一个额外的问题:
问题定义是这样的: 您有一个数据源,其中数字存储为 String
。这个来源可能是 XML 文件,网页,桌面窗口与2个编辑框,无论什么。
您的目标是实现采用这两个 String
的逻辑,将它们转换为 int
并显示消息框,其中显示“和为 xxx”。
无论您使用什么方法来设计/实现它,您都将 有这两点内部功能:
String
转换为 int
的位置int
我最初的帖子的主要问题是:
Integer.parseInt()
期望传递 正确字符串。每当你传递一个 坏线,这意味着 你的程序是不正确的(而不是“ 你的用户是一个白痴”)。您需要实现这段代码,其中一方面您拥有带有 必须语义的 Integer.parseInt () ,另一方面您需要确定输入不正确的情况-应该是语义学上的。
因此,简单地说: 如果我只有 图书馆必须,我如何实现 应该是语义学上的。