我有一个我想要调用的FileUtils类进行一些验证,如果它错了,它需要返回一个好的错误消息,说明验证失败的原因。所以我有:
public static boolean isValidFile(File file) throws Exception
{
if(something)
throw new Exception("Something is wrong");
if(somethingElse)
throw new Exception("Something else is wrong");
if(whatever)
throw new Exception("Whatever is wrong");
return true;
}
public void anotherMethod()
{
try
{
if(isValidFile(file))
doSomething();
} catch (Exception e) {
displayErrorMessage(e.getMessage());
}
}
但这对我来说似乎很奇怪,因为isValidFile调用永远不会是假的。此外,如果我反转if条件的顺序,如果它是假的,那么快速启动代码,它甚至更奇怪。另外,我不喜欢将异常处理代码作为传递错误消息的方式。
public void anotherMethod()
{
try
{
if(!isValidFile(file))
return;
doSomething();
..
doMoreThings();
} catch (Exception e) {
displayErrorMessage(e.getMessage());
}
}
有没有办法在不使用Exceptions的情况下完成所有这些操作,并且仍然能够让isValidFile()方法返回错误信息的指示,而不返回带有错误代码的int,就像你在C中看到的那样等。
答案 0 :(得分:2)
你可以,例如将您的方法更改为
public static List<String> isValidFile(File file)
当文件有效时,返回空列表或null
,
否则返回一个包含验证问题的列表。中
如果验证失败,则返回值是您的指示。
答案 1 :(得分:0)
你可以这样做:
public static String validateFile(File file)
{
String ret = null;
if(something) {
ret = "Something is wrong";
} else if(somethingElse) {
ret = "Something else is wrong";
} else if(whatever) {
ret ="Whatever is wrong";
}
return ret;
}
public void anotherMethod()
{
String errorMessage = validateFile(file);
boolean fileIsValid = errorMessage == null;
if (fileIsValid) {
doSomething();
} else {
displayErrorMessage(errorMessage);
}
}
不是很漂亮,但它完成了工作。