我有一个值检查功能,类似于信用卡号检查功能,它以字符串形式传递,并且需要检查该值的格式正确。
如果格式正确,则需要返回true。
如果格式不正确,则需要返回false,并告诉我们该值出了什么问题。
问题是,实现此目标的最佳方法是什么?
以下是一些解决方案:
1.使用整数/枚举返回码表示含义:
String[] returnCodeLookup =
[
"Value contains wrong number of characters, should contain 10 characters",
"Value should end with 1",
"Value should be a multiple of 3"
]
private int valueChecker(String value)
{
/*check value*/
return returnCode;
}
rc = checkValue(valueToBeChecked);
if rc == 0
{
/*continue as normal*/
}
else
{
print("Invalid value format: ") + returnCodeLookup[rc];
}
我不喜欢这种解决方案,因为它需要在调用方方面实现。
2.创建一个returnCode类
Class ReturnCode()
{
private boolean success;
private String message;
public boolean getSuccess()
{
return this.success;
}
public String getMessage()
{
return this.message;
}
}
private ReturnCode valueChecker(String value)
{
/*check value*/
return returnCode;
}
rc = checkValue(valueToBeChecked);
if rc.getSuccess()
{
/*continue as normal*/
}
else
{
print("Invalid value format: ") + rc.getMessage();
}
这个解决方案很整洁,但似乎过分/重新发明了轮子。
3.使用例外。
private boolean valueChecker(String value)
{
if int(value)%3 != 0 throw InvalidFormatException("Value should be a multiple of 3";
/*etc*/
return True;
}
try {
rc = checkValue(valueToBeChecked);
}
catch (InvalidFormatException e)
{
print e.toString();
}
我很想使用此解决方案,但被告知您不应将异常用于业务逻辑。
“ [..]检查值的格式正确。” 那名字不应该是FormatChecker吗?
—
安迪
正确/错误结果似乎是多余的。是否可以简单地返回一个空字符串或空字符串来表示成功?在UNIX上已经工作了大约50年。:-)
—
user949300 '17