java
  • try-catch
  • tostring
  • 2013-07-05 94 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僅用於獲取和設置值,所以沒有什麼異常的機會。
    如果你想對數據進行一些操作,那麼試着在這個類之外做這件事。使用這些類型的類只包含數據和不裏面的類執行的操作(除了小的操作只有當需要的極端)

    相關問題