如何在不使用更多java try的情况下提高代码性能

时间:2014-12-04 04:41:53

标签: java xml json performance try-catch

我有一个以下代码,我用来从第三方读取消息我将它从xml转换为json消息有时我可能没有所有的值取决于scenerios值计数将改变所以有时我失踪中间的一些值并停止打印它们如果我使用try catch获取的每个值都没有任何值(空值)。我的问题是,而不是使用try catch,每一行都有其他任何选项。

try{
            printmsg.setGatepass(tosPrint.get("gatepass").toString());
            } catch (JSONException e) {
            e.printStackTrace();
            LogWriter.LogErrorMessage(e);
        }try{
            printmsg.setTransactionType(tosPrint.get("transactionType").toString());
            } catch (JSONException e) {
            e.printStackTrace();
            LogWriter.LogErrorMessage(e);
        }try{
            printmsg.setContainer(tosPrint.get("container").toString());
            } catch (JSONException e) {
            e.printStackTrace();
            LogWriter.LogErrorMessage(e);
        }try{
            printmsg.setSsco(tosPrint.get("ssco").toString());
            } catch (JSONException e) {
            e.printStackTrace();
            LogWriter.LogErrorMessage(e);
        }try{
            printmsg.setWgt(tosPrint.get("wgt").toString());
            } catch (JSONException e) {
            e.printStackTrace();
            LogWriter.LogErrorMessage(e);
        }try{
            printmsg.setTruckingcmpny(tosPrint.get("truckingCompany").toString());
            } catch (JSONException e) {
            e.printStackTrace();
            LogWriter.LogErrorMessage(e);
        }try{
            printmsg.setIssuetime(tosPrint.get("issueTime").toString());
            } catch (JSONException e) {
            e.printStackTrace();
            LogWriter.LogErrorMessage(e);
        }try{
            printmsg.setLicense(tosPrint.get("driverLicense").toString());
            } catch (JSONException e) {
            e.printStackTrace();
            LogWriter.LogErrorMessage(e);
        }try{
            printmsg.setChasis(tosPrint.get("chasis").toString());
            } catch (JSONException e) {
            e.printStackTrace();
            LogWriter.LogErrorMessage(e);
        }try{
            descNodes = tosPrint.getJSONObject("description");
            linelist = descNodes.getJSONArray("eachLine");
            printmsg.setDescription_lines(new String[linelist.length()]);
            for (int i=0;i<linelist.length(); i++)
            {
                printmsg.getDescription_lines()[i]=  linelist.getString(i);
            }
        } catch (JSONException e) {
            e.printStackTrace();
            LogWriter.LogErrorMessage(e);
        }

假设我拥有gatepass,transactionType,container,ssco,driverLicense,chasis和缺少一些值的值,例如wgt,issueTime,truckingCompany我能够打印到ssco如果没有使用try catch并使用try catch我能够打印所有的值,所以有任何选项没有使用try catch块的数量如何在没有任何值的情况下实现打印所有值,即null。

3 个答案:

答案 0 :(得分:0)

我建议的最简单的方法是覆盖/修改&#34; tosPrint&#34;的.get()方法。你必须自己处理这种方法中的异常。如果您喜欢这种方法,请在上面分享的内容之后和之后显示更多代码。 请参阅以下代码示例以获取帮助:

创建一个类变量tosPrint。 在类中创建一个私有get方法。 您必须以这种方式试用下面给出的代码。我现在没有在我的机器上安装JVM。请配合编译错误。

public class PrintingMsgs{

    private TosPrint tosPrint;

      /*Here you wrap the get() method of third party jar */
    private String get(String str){
                   try{
                          return tosPrint.get(str).toString();
                   } catch (JSONException e) {
                          e.printStackTrace();
                          LogWriter.LogErrorMessage(e);
                   }
                   return null;
      }


    mainMethod(){
        tosPrint = new TosPrint();
        Printmsg printmsg= new Printmsg();

        printmsg.setGatepass(get("gatepass"));
        printmsg.setTransactionType(get("transactionType"));
        printmsg.setContainer(get("container"));
        printmsg.setSsco(get("ssco"));
        printmsg.setWgt(get("wgt"));
        printmsg.setTruckingcmpny(get("truckingCompany"));
        printmsg.setIssuetime(get("issueTime"));
        printmsg.setLicense(get("driverLicense"));
        printmsg.setChasis(get("chasis"));

        try{
                    descNodes = tosPrint.getJSONObject("description");
                    linelist = descNodes.getJSONArray("eachLine");
                        printmsg.setDescription_lines(new String[linelist.length()]);
                        for (int i=0;i<linelist.length(); i++)
                        {
                         printmsg.getDescription_lines()[i]=  linelist.getString(i);
                        }
                } catch (JSONException e) {
                    e.printStackTrace();
                        LogWriter.LogErrorMessage(e);
             }
    }
}

答案 1 :(得分:0)

我认为你可以为你的所有逻辑使用一个try-catch块。如果其中一个步骤有例外 - 下一步将不会执行:

    try{
        printmsg.setGatepass(tosPrint.get("gatepass").toString());
        printmsg.setTransactionType(tosPrint.get("transactionType").toString());
        printmsg.setContainer(tosPrint.get("container").toString());
        printmsg.setSsco(tosPrint.get("ssco").toString());
        printmsg.setWgt(tosPrint.get("wgt").toString());
        printmsg.setTruckingcmpny(tosPrint.get("truckingCompany").toString());
        printmsg.setIssuetime(tosPrint.get("issueTime").toString());
        printmsg.setLicense(tosPrint.get("driverLicense").toString());
        printmsg.setChasis(tosPrint.get("chasis").toString());
        descNodes = tosPrint.getJSONObject("description");
        linelist = descNodes.getJSONArray("eachLine");
        printmsg.setDescription_lines(new String[linelist.length()]);
        for (int i=0;i<linelist.length(); i++)
        {
            printmsg.getDescription_lines()[i]=  linelist.getString(i);
        }
    } catch (JSONException e) {
        e.printStackTrace();
        LogWriter.LogErrorMessage(e);
    }

答案 2 :(得分:0)

您是否尝试过xstream自定义,编写转换器。 ?