方法返回类型

时间:2010-03-22 23:19:33

标签: java int

在我的公司,系统设计有3层。 Layer1负责业务逻辑处理。 Layer3正在回调终端系统。 Layer2位于两个层之间,因此layer1不需要知道后端系统。要从layer3中继信息,layer2需要定义layer1的接口。

例如,layer1想要检查来自用户的PIN是否正确。它调用layer2 checkPin()方法,然后layer2调用相关的后端系统。 checkPin()结果可能是:correctPin,inCorrectPin和internalError。目前,我们定义了返回类型'int'。因此,如果layer2返回0,则表示correctPin;如果返回1,则表示inCorrectPin;如果返回9则表示internalError。

有效。但是我对这种方法感到有点不安。有更好的方法吗?例如,定义一个枚举CheckPinResult {CORRECT_PIN,INCORRECT_PIN,INTERNAL_ERROR},并返回CheckPinResult类型?

谢谢, 萨拉

4 个答案:

答案 0 :(得分:1)

你得到内部错误是否是一个合理的常见情况?如果没有,我会checkPin返回一个布尔值并在出现内部错误时抛出异常(但我可能会调用方法pinIsValid或类似的东西)。

如果它(由于某种原因)是预期的结果遇到内部错误,那么三态枚举可能会很好(我在当前项目中有类似的情况)。

答案 1 :(得分:1)

我喜欢enum方法。它是自我记录的,易于扩展。您可以设置每个返回的值以匹配您现有的0,1,9惯例。

抛出异常当然是一种可辩护的方法,但抛出异常可能是一件昂贵的事情。我一直认为它们应该被用来表示真正特殊的情况。根据您的业务问题,有一个坏针可能会或可能不是那么特殊。如果你的进程允许引脚具有“五个九”的可靠性,那么我会说一个例外是一个很好的方法。

但如果失败率更高的是1%,我会说回报值可能更好。您可能希望遍历大量值,只需将带有失败引脚的部分#s作为大批量累积。这取决于您如何使用错误代码。

答案 2 :(得分:1)

Enum肯定是对整数返回类型的改进,也是一种非常有效的方法。另一种选择是拥有第2层签名,例如:

public boolean isPINValid() throws InternalErrorException();

因为,我认为,内部错误是例外,为什么不将它们视为这样?

答案 3 :(得分:1)

这是一个风格问题。你描述的方式是一种实现目标的C风格。 java样式如下:checkPin(pin)应该返回一个布尔值。真的意思是针是好的,错误意味着它不好。如果发生错误,则抛出异常。异常是处理Java中错误的标准方法。例外是有用的,因为它们可以有类型和错误消息来帮助调试。

我说你描述的机制是C风格,因为在C中,处理错误的标准方法是返回一个映射到一个define的整数,然后通过引用传入你要查找的值(在这种情况下)一个布尔值)。所以在c中你会有

int checkPin(int pin, bool &ans); //returns an error value.

无论哪种方式,我强烈建议不要在返回布尔值的同一位置返回错误值。这会产生混淆,因为单个值(返回值)实际上只应代表一件事。错误状态和问题的答案是两个不同的东西,所以应该通过不同的渠道返回。

我希望有所帮助。