我有这种方法,可以返回三种不同的响应。
首先,它应该只返回两个,所以我将其返回类型设为Boolean
像:
public static boolean isLoteWaitingForImage()
并且出现了一些业务逻辑,它可能有另一个结果,因此该方法被修改为
public static boolean isLoteWaitingForImage() throws ImageNotPendingException
如果某个select
返回null
值,但其中一行返回true
,如果不是null
我将返回false
。如果未从select
throw
ImageNotPendingException
where
获取任何行,则它不适用于isLoteWaitingForImage()
子句中的给定过滤器。
还考虑过这样做,我有一个新的类,它有效的类型从方法public class LoteResponse {
public static int VALID = 1;
public static int INVALID = 2;
public static int NO_IMAGE_PENDING = 3;
}
返回,有3个常量属性叫做:
public static int isLoteWaitingForImage() {
return LoteResponse.VALID;
}
所以我将有这个新方法:
{{1}}
有了这个问题,我有两个问题:
关于如何完成此需求的任何“其他”想法?
哪种方法更好?
答案 0 :(得分:11)
是的,这对我来说似乎是一种虐待。
如果在没有图像挂起时不应该调用该方法,则抛出异常是合理的。客户总能知道吗?它是代表一个错误,还是其他一些错误的东西让他们在那个州调用它?如果没有,请不要使用例外。
在我看来,你需要一个枚举。
public enum LoteResponseState
{
Valid,
Invalid,
NoImagePending;
}
public static LoteResponseState getLoteState()
{
...
}
答案 1 :(得分:5)
isLoteWaitingForImage()
的代码直接负责处理“无图像待处理”条件以及其他条件,则使用多个返回值但使用枚举,而不是整数!强> 答案 2 :(得分:1)
我绝对同意enum是最好的选择。
作为一般规则,如果某个操作不被视为很少发生的严重错误,则不应抛出异常。仅针对当前方法无法以有用方式处理任何方式的错误抛出异常,但不作为典型返回值。
答案 3 :(得分:1)
我不是专家所以不要把它作为最佳实践建议,但我认为在这个特殊情况下使用例外似乎是一种矫枉过正。如上所述,我会寻求一些简单的返回值。
如果您真的想要跟踪情况,无论出于调试或开发原因,您都可以抛出RuntimeException("why a runtime exception is thrown")
。如果你没有做一些特殊的异常,编写一个自己的异常似乎太过分了。
我希望这有点道理。 :)
答案 4 :(得分:-2)
寻找例外方式。它确实有一个更明确的调用者接口。如果调用者需要处理此ImageNotPendingException,则将其设置为Checked Exception。
返回枚举是一件奇怪的事情,因为它通过将业务细节和处理委托给调用者来减少封装。通过这种方式,来电者需要知道太多的calee。
抱歉我的英语不好。