2016-04-30 11 views
1

ルック次のコードでは、例外の新しいリストを投げます。 しかし、私はすべての例外をキャッチしたい。例外がある場合は、GUIにすべてのエラーのリストを送信したいと思います。

これを行うにはどうすればよいですか、すべての行をTry Catchで囲む必要がありますか?キャッチ複数の例外とは

+0

例外が発生した場合、なぜ製品を変更しようとしますか?例外が発生した場合は、問題があることを示します。あなたがそれを編集しようとする前の状態に残しておくべきです(*有効なJava *はこれを「失敗した原子性」と呼んでいます(http://stackoverflow.com/questions/29842845/what- i-term-of-that-that-beneficial-in-of-of-that-of-that-of-j-bloch-and-how- –

+0

こんにちは、私はユーザーにさまざまなエラーを表示したい: ' - 説明はありません - 価格はありません - ...' – Demian

+0

ここでは例外は何ですか?これらのメソッドはシンプルなセッターですか?ここで例外が発生する可能性... – GOXR3PLUS

答えて

0

リスト内にすべての例外が必要な場合は、各行を囲み、例外をリストに追加する必要があります。最後のチェックでは、リストのサイズが0より大きい場合はそのリストを例外として返します。あなたが本当にそのようなことをしたい場合は、あなたが可能な例外をキャッチし、またはリストに追加し、ラムダとセッターを実行キャッチしまう方法に設定するプロパティを委任することができ

List<CustomException> exceptionList = new ArrayList<CustomException>(); 
public void editProduct(String articleNumber, ...) 
{ 
    try{ 
      product.setArticleNumber(articleNumber); 
    }catch(CustomException exception) 
    { 
     exceptionList.add(exception); 
     } 
     try{ 
     product.setDescription(description); 
     }catch(CustomException exception) 
    { 
     exceptionList.add(exception); 
     } 
    try{ 
    product.setLendable(lendable); 
    }catch(CustomException exception) 
    { 
     exceptionList.add(exception); 
     } 
    try{ 
      product.setName(name); 
    }catch(CustomException exception) 
    { 
     exceptionList.add(exception); 
     } 
     try{ 
     product.setPrice(price); 
    }catch(CustomException exception) 
    { 
     exceptionList.add(exception); 
     } 
    try{ 
     product.setPlace(place); 
    }catch(CustomException exception) 
    { 
     exceptionList.add(exception); 
     } 
} 
+0

ありがとうございます。これのためのよりよい解決策? – Demian

+0

setterメソッドから例外をスローするのではなく、すべてのセッターチェックを処理するvalidateメソッドを追加し、すべてのフィールドバリデーションに対してすべての操作を実行するだけです。 –

+0

こんにちは、それは可能です。しかし、私はすべての "ドメイン"のコードをdomainclassに保持したい。 – Demian

0

​​
1

次のコードを試すことができます。適切である場合

public void editProduct(String articleNumber, ...) { 
    int count=1; 
    Vector<String> v=new Vector<String>(); 
    while(count<=6) 
    { 
     try{ 

      switch(count) 
      { 
       case 1:product.setArticleNumber(articleNumber);break;//assume it will throw ArticalException 
       case 2:product.setDescription(description);break; //DescriptionException 
       case 3:product.setLendable(lendable);break;   //LendableException 
       case 4:product.setName(name);break;     //NameException 
       case 5:product.setPrice(price);break;    //PriceException 
       case 6:product.setPlace(place);break;    //PlaceException 
      } 
      count++; 
     }catch(Exception e) 
     { 
      v.add(e.getMessage); 
      count++; 
      /* 
      *suppose there is some exception like ArticalException,PriceException 
      *then it will store in vector and your program running continue 
      *and at last you have the list of all exceptions that are occured in program 
      *now you will take desired action what you want to do 
      **/ 
     } 
    } 

} 
+0

こんにちは、私はあなたのソリューションが好きです!私はそれがベストプラクティスであるかどうかわかりません 小さなことですが、セッターが失敗すると、カウントは同じになります。だからあなたは無限ループをしています。 スイッチの前、またはfinallyグループで増分できますか? – Demian

+0

私のコードを見てください..カウント+ ++ステートメントがあります。スイッチとキャッチブロックの後にcount + +ステートメントがあります。 –

+0

そうです...しかし、for(count = 1; count <= 6; count ++)は同じことを行います。はるかに読みやすいです。また、 'ProductException'をキャッチする必要があります。 'Exception'をキャッチすることは、予期しない例外が検証エラーとしてユーザに報告されるため、悪い考えです。 –

関連する問題