java
  • try-catch
  • tostring
  • 2013-07-05 93 views 2 likes 
    2

    有我的类中的覆盖Object的人里面toString标准方法。try catch块

    是否使用尝试捕捉在此方法中好的做法呢?

    @Override 
    public String toString() { 
        try { 
         return 
           "number='" + product.getProductNumber() + 
           ", locale=" + locale; 
        } catch (ProductException e) { 
         return super.toString(); 
        } 
    } 
    
    +0

    该方法是投掷ProductException? – Reddy

    +0

    也许你想问这是否是一种“良好做法”,而不是“正常做法”。 – zEro

    +0

    是的,我编辑后 – sergionni

    回答

    3

    不,这不是正常的做法。应该使用异常来处理异常情况,而不是常规的代码流。

    您的代码使用try/catch来检测可以在不引入异常情况下处理的情况。这大致相当于下面的方法:

    @Override 
    public String toString() { 
        if (product.checkProductNumber()) { 
         return "number='" + product.getProductNumber() + 
           ", locale=" + locale; 
        } else { 
         return super.toString(); 
        } 
    } 
    

    getProductNumber调用将不会抛出ProductExceptionfalse否则虚checkProductNumber方法返回true。使用像checkProductNumber这样的方法并使用它而不是捕获异常是在正常程序流程中捕获异常的一种更好的编码方法。

    0

    我没有看到任何明显的理由不这样做。但是,如果抛出ProductException,您当前的提议将丢失区域设置信息。除非你只想要这个或super.toString调用(),也许你应该做这样的事情:

    @Override 
    public String toString() { 
        String number = null; 
        try { 
         number = product.getProductNumber(); 
        } catch (ProductException e) { 
         number = "unknown: " + e.getMessage(); // or something like this 
        } 
        // here you may or may not include super.toString() 
        return super.toString() + ", number=" + number + ", locale=" + locale; 
    } 
    
    0

    我还没有见过的try-catch中的toString使用。但如果你使用某种方法可以抛出异常,那么我没有看到任何问题在使用try-catch里面的toString

    0

    是的这没有什么错。如果你知道任何异常将发生在toString()然后你可以在其中使用try-catch{ }

    0

    如果product.getProductNumber()可能会引发ProductException的方法是正确的方式。

    +0

    事实上使用try-catch从来没有错 – MinecraftShamrock

    2

    中的toString不是normat练习使用try/catch语句,但没有限制使用try/catch语句中的toString()方法。
    但如果你想删除的try/catch在你的代码,那么你必须有一个谁抛出这个ProductException例外,什么是在这个异常被抛出条件的知识。

    • 如果这被检查的异常,然后在这种情况下,您可以创建布尔选项温度的方法来检查这个操作是否正常运行或抛出异常。如@dasblinkenlight回答中所示。

    注:最好的做法说的toString()方法是在谁包含一些数据的类新并在这些类型的班级总是覆盖的getter/setter仅用于获取和设置值,所以没有什么异常的机会。
    如果你想对数据进行一些操作,那么试着在这个类之外做这件事。使用这些类型的类只包含数据和不里面的类执行的操作(除了小的操作只有当需要的极端)

    相关问题