相当愚蠢的问题。给定代码:
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
s。该源可以是XML文件,网页,带有2个编辑框的桌面窗口,无论如何。
您的目标是实现采用这2 String
s的逻辑,并将其转换为int
s并显示消息框,说“和为xxx”。
无论您使用什么方法来设计/实现此功能,您都将拥有以下两点内部功能:
- 在那里你转换的地方
String
,以int
- 加2
int
秒的地方
我的原始帖子的主要问题是:
Integer.parseInt()
期望传递正确的字符串。每当您传递错误的字符串时,就意味着您的程序不正确(不是“您的用户是个白痴”)。您需要实现一段代码,一方面您必须具有必须具有语义的Integer.parseInt(),另一方面您需要在输入不正确的情况下可以正常工作-应该语义。
因此,简要地讲:如果我只有MUST库,如何实现应该的语义。