现在这对我来说真的很难解释所以请耐心等待。
我一直想知道,当某些情况得到满足时,将每个链式方法“解除”回主方法的最佳方法。例如,假设我从Main调用一个方法,从那个方法调用另一个方法,依此类推。在某些时候,我可能想要取消链接的每个方法的所有进一步操作,并简单地返回到Main方法。这样做的最佳方式是什么?
我将给出一个场景:
在下面的代码中有3种方法,但是当Method1使用null值调用Method2时,它应该一直放松回Main,而不需要在Method2中进一步操作(EG“很多其他代码”部分)。
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的方法时,我发现我没有足够的选项来返回决定一个动作。我想我可以使用枚举器或类,但这似乎有些麻烦。
答案 0 :(得分:2)
我使用了一个我读过的只能用于"异常环境"。我经常遇到这个问题,发现自己只是在做If / Else语句来解决问题
异常抛出是相对昂贵的,所以不应该在没有仔细考虑的情况下使用它,但我相信你的例子是一个正确使用的正确例子。
一般情况下,您应该仅将例外用于"例外"该计划的行为。如果someString
可以null
通过某种用户输入,数据库值或其他正常机制,那么通常你应该使用正常的返回机制来处理这种情况。
在您的情况下,如果Boolean
为空,您可以返回null
对象(不是原始对象)并返回someString
。
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;
}
然后在主要内容中,您可以看到method1
"是否正常工作":
public static void main(String[] args) {
if (!method1()) {
// handle error
}
...
}
请注意,我对方法名称进行了下调,并将方法的权限更改为private
,这两种方式都是很好的模式。
确实如此。这取决于如何使用此代码。如果它是其他人调用的API方法,您可能希望返回某种调查员或类,但这看起来有些麻烦。
Result
类,它可能提供反馈,如boolean
,参数为null
。或者你可以在这种情况下抛出IllegalArgumentException
。相反,如果这是一个内部本地私有方法,那么我投票支持一种更简单的方法来处理参数错误。无论哪种方式,我都会使用javadoc来记录行为,这样你就不会绊倒你。
希望这有帮助。