即使调用了catch块,代码也在执行

时间:2011-11-18 04:18:15

标签: java

我有这种方法。 问题是当满足这个条件时

if (bagList==null||bagList.size()<1 && UngarList==null||UngarList.size()<1 )

这是进入阻止区块

catch (Exception e) {

        this.errorText = e.getMessage().toString();
        info.setErrorText(this.errorText.toString());
        response.setinfo(info);

    }

但它仍在执行下一行

final boolean toProceedorNot = validate(bagList.toArray(new Bag[bagList.size()]))

如果符合要求则需要什么

if (bagList==null||bagList.size()<1 && UngarList==null||UngarList.size()<1 )
**then directly return the   response;**

这是我的方法

public Response getData(Request request) {

    Info info = new Info();

    Response response = new Response();
    String xmlrequest = request.getxmlMessage();

    HashMap listMap = new HashMap();
    List<Ungar> UngarList = new ArrayList<Ungar>();
    List<Bag> bagList = new ArrayList<Bag>();

    UniverseStaxParser xmlparser = new UniverseStaxParser();
    try {
        listMap = (HashMap) xmlparser.parseData(xmlrequest);

        UngarList = (List<Ungar>) listMap.get("UngarItems");

        bagList = (List<Bag>) listMap.get("bagItems");


        if (bagList==null||bagList.size()<1 && UngarList==null||UngarList.size()<1 )
            throw new Exception("No Valid Data is passed as Input ");

    } catch (Exception e) {

        this.errorText = e.getMessage().toString();
        info.setErrorText(this.errorText.toString());
        response.setinfo(info);

    }

    final boolean toProceedorNot = validate(bagList.toArray(new Bag[bagList.size()]));


    try {
        if (!toProceedorNot) {
            info.setErrorText(errorText);
            response.setinfo(info);

        } else {

            // some logic here goes 
        }
    } catch (Exception e) {
        errorText = e.getMessage().toString();
        info.setErrorText(errorText);
        response.setinfo(info);
    }



    return response;
}

2 个答案:

答案 0 :(得分:6)

为什么不执行这些行?它们在try/catch之外,没有什么能阻止正常的程序执行流程。

除非您从方法返回(或以其他方式更改控制流),否则将在catch块之后的语句处继续执行。

如果要从catch块返回响应,请从Response块返回catch

然而,我不相信这是一个很好用的通用Exception

答案 1 :(得分:1)

我必须认为你应该重新设计这部分软件:

if (bagList==null||bagList.size()<1 && UngarList==null||UngarList.size()<1 )

如果bagListnull,则在其上调用方法将引发异常。如果UngarListnull,则在其上调用方法将引发异常。实在没有必要。

不确定这些是null - 上面几行,你为它们分配了新值,而且几乎立即覆盖了引用,失去了对新创建对象的引用。这似乎也不对。

找出哪些条件真正特殊,哪些条件可以发生 - 并尝试以简单的方式处理异常。