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:
有一些评论说我的设计很糟糕。我绝对同意,但对于那些认为如果我们有好的设计,原始问题永远不会出现的人来说,这里有一个额外的问题:sum(String, String)
问题定义是这样的:您有一个数据源,其中数字存储为 s。这个来源可以是XML文件,网页,带有2个编辑框的桌面窗口,等等。String
您的目标是实现采用这 2 s 的逻辑,将它们转换为 s 并显示消息框,指出“总和是 xxx”。String
int
无论您使用什么方法来设计/实现它,您都将拥有以下两个内部功能点:
- 一个你转换的地方
String
int
- 添加 2 秒的地方
int
我的原始帖子的主要问题是:
Integer.parseInt()
期望传递正确的字符串。每当你传递一个坏字符串时,这意味着你的程序是不正确的(而不是“你的用户是白痴”)。你需要实现这段代码,一方面你有具有MUST语义的Integer.parseInt(),另一方面你需要对输入不正确的情况感到满意 - SHOULD语义。
所以,简而言之:如果我只有MUST库,我该如何实现 SHOULD 语义。