0

これはサンプルコードの一部です

public OperationResult beforeEverything(BDDObject savingObject) {

  String checkAssetRole = doCheckAssetRole(savingObject);

  if (checkAssetRole != null && !checkAssetRole.equals("MissingAssetRole")) {
    return new OperationResult(new OperationExecutionError("SIP-37006",
                               new String[] {"Duplicate asset roles have been defined: " + checkAssetRole},
                               getLocalizationGate()));
  }
  ArrayList<String> warnings = new ArrayList<String>();
  boolean showWarning = false;

  if (checkAssetRole != null && checkAssetRole.equals("MissingAssetRole")) {
    mLogger.debug("Warning  of Asset role");
    warnings.add(new String(
                "Asset role is missing. Do you want to save the record?"));
    showWarning = true;
  }
  return OperationResult.OK;
}

問題は、doCheckAssetRoleメソッドが を返すことnullです。では、メソッドでどのように処理できますかbeforeEverything()。実行する例外処理はありますか? もしそうなら、どのように?

4

4 に答える 4

1

doCheckAssetRole が null の場合は、必要なビジネス ロジックによって異なります。

  • これは有効なビジネス ユース ケースに対応しているため、このケースに対応する OperationResult オブジェクトが返されるので、次のようにします。

    if (checkAssetRole == null)
      return new NoAssetRoleOperationResult();
    

    そして、呼び出しコードはこの種の結果を処理します。

  • ユーザーが間違いを犯した場合を除き、チェック例外をスローすることはありません。

    if (checkAssetRole == null)
      throw new NoAssetRoleException(yourMessage);
    

    メソッド宣言を行いますthrows NoAssetRoleExeption。呼び出し元のコードは、このエラーをユーザーに転送する責任があります。

  • 環境エラー(リモートサーバーがダウンしている)が原因で失敗した場合、 のような未チェックの例外をスローするRuntimeExceptionと、トップレベルコードがそれをキャッチして、環境エラーがあることを示します。

  • 開発エラーが原因で失敗した場合 (理論的には、このコードは null を返すことはありません)、次のようにアサートします。

    assert checkAssetRole != null : "assetRole should not be null"
    

あなたのケースを選んでください:)

于 2012-07-26T09:57:33.870 に答える
1

チェックを入れてからをnull投げます。RuntimeExceptionmessage

 if(checkAssetRole==null)
      throw new RuntimeException ("AssetRole value is NULL.");

そして、あなたのコードは次のようになります。

String checkAssetRole = doCheckAssetRole(savingObject);

if(checkAssetRole==null)
      throw new RuntimeException ("AssetRole value is NULL.");

if (checkAssetRole != null && !checkAssetRole.equals("MissingAssetRole")) {
return new OperationResult(new OperationExecutionError("SIP-37006",
                           new String[] {"Duplicate asset roles have been defined: " + checkAssetRole},
                           getLocalizationGate()));
}
于 2012-07-26T09:50:09.453 に答える
0

メソッドから戻るnullのは通常の方法です。発信者はそれを確認する必要があります。あなたの場合、チェックを行い、それに応じて行動することができます。例外をスローしたい場合は、そうすることができます。

   public OperationResult beforeEverything(BDDObject savingObject) {

     String checkAssetRole = doCheckAssetRole(savingObject);

     if (checkAssetRole == null) {
         // DO SOMETHING HERE. eg. throw new RuntimeException("Asset Role should not be null");
         //   or simply return null;

     }
于 2012-07-26T09:53:00.243 に答える
0

null が返されたときに何をしたいかによって異なります。doCheckAssetRole から null が返されたときに値 NotOK を返したい場合は、このフラグメントを使用できます。

public OperationResult beforeEverything(BDDObject savingObject) {

  String checkAssetRole = doCheckAssetRole(savingObject);

  if (checkAssetRole == null) {
    return OperationResult.NotOK; // Or something else that indicates to the calling method what happened.
  else {
    if (!checkAssetRole.equals("MissingAssetRole")) {
      return new OperationResult(new OperationExecutionError("SIP-37006",
                                 new String[] {"Duplicate asset roles have been defined: " + checkAssetRole},
                                 getLocalizationGate()));
    }
    ArrayList<String> warnings = new ArrayList<String>();
    boolean showWarning = false;

    if (checkAssetRole.equals("MissingAssetRole")) {
      mLogger.debug("Warning  of Asset role");
      warnings.add(new String(
                   "Asset role is missing. Do you want to save the record?"));
      showWarning = true;
    }
    return OperationResult.OK;
  }
}
于 2012-07-26T09:56:30.293 に答える