gpt4 book ai didi

java - 是否应该使用异常将流程退回到主流程?

转载 作者:行者123 更新时间:2023-11-30 02:50:01 25 4
gpt4 key购买 nike

现在这对我来说确实很难解释,所以请耐心等待。

我最近一直在想,当满足某些情况时,将每个链接方法“展开”回主方法的最佳方法。例如,假设我从 Main 调用一个方法,然后从该方法调用另一个方法,依此类推。在某些时候,我可能想取消链接的每个方法的所有进一步操作,并简单地返回到 Main 方法。最好的方法是什么?

我将给出一个场景:

在下面的代码中有 3 个方法,但是当 Method1 使用 null 值调用 Method2 时,它应该一路展开回 Main,而无需在 Method2 中进行进一步操作(例如“很多其他代码”部分)。

public static void main(String[] args) 
{
try
{
Method1();
}
catch( ReturnToMainException e )
{
// Handle return \\
}
}

public static void Method1() throws ReturnToMainException
{
String someString = null;
Method2( someString );

// Lots more code after here
}

public static boolean Method2( String someString )
{
if( someString == null )
throw new ReturnToMainException();
else if( someString.equals( "Correct" ))
return true;
else
return false;
}

在这个例子中,我使用了一个我读过的抛出应该只在“异常情况”中使用。我经常遇到这个问题,发现自己只是简单地执行 If/Else 语句来解决问题,但是当处理只能返回 True/False 的方法时,我发现我没有足够的选项来返回来决定操作。我想我可以使用枚举器或类,但这似乎有点麻烦。

最佳答案

I use a throw which I've read should only be used in "Exceptional Circumstances". I often run into this issue and find myself simply doing If/Else statements to solve the issue

异常抛出相对昂贵,因此不应该在没有仔细考虑的情况下使用它,但我相信你的例子是正确使用的一个很好的例子。

一般来说,您应该只对程序的“异常”行为使用异常。如果通过某种用户输入、数据库值或其他正常机制,someString 可以为 null,那么通常您应该在可能的情况下使用正常返回机制来处理这种情况。

在您的情况下,您可以返回一个 Boolean 对象(不是基元),并在 someString 为 null 时返回 null

private static Boolean method2( String someString ) {
if (someString == null) {
return null;
}
...
}

然后,您将在调用者中适本地处理 null ,可能会根据方法是否“有效”将 boolean 返回到 main .

private static boolean method1() {
...
Boolean result = method2(someString);
if (result == null) {
// the method didn't "work"
return false;
}

然后在 main 中您可以查看 method1 是否“有效”:

public static void main(String[] args) {
if (!method1()) {
// handle error
}
...
}

请注意,我将您的方法名称小写并将方法的权限更改为private,这都是很好的模式。

Enumerators or classes but that seems somewhat cumbersome.

确实是的。这在一定程度上取决于该代码的使用方式。如果它是由其他人调用的 API 方法,您可能希望返回某种 Result 类,该类可能会提供类似 boolean 的反馈,表明参数是 。或者在这种情况下您可能会抛出 IllegalArgumentException。相反,如果这是一个内部本地私有(private)方法,那么我会投票支持一种更简单的处理参数错误的方法。无论哪种方式,我都会使用 javadocs 来记录行为,这样您就不会绊倒 future 的您。

希望这有帮助。

关于java - 是否应该使用异常将流程退回到主流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39007327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com