5

私はJavaに少し慣れていませんが、今はジレンマに直面しています。次のようなエラーリストがあります。

"ERROR CODE" "POSITION" "Error description"
"000" "1" "No error"
"001" "1" "Connection error"
"002" "1" "Error sending reversal or batch capture process"
"003" "1" "Error after authorization – message sent to host and answer received"
"004" "1" "Error sending message for authorization"
"005" "1" "Error receiving message from host"

そしてもっとたくさんのエラー。

今、私が本当に必要なのは、このエラーを実装することです(エラーは変更されません。常に同じです)。これにより、ライブラリを使用する開発者は、指定されたERROR_CODEによってエラーの説明を簡単に識別できます。

例:String getError(ERROR_CODE); ERROR_CODEに関連付けられたエラーの説明の文字列を返します。

ENUMデータ構造を宣言することを考えましたが、正しく機能させることができないようです。

どうもありがとうございます。

4

8 に答える 8

3

次のように列挙型を使用できます。

enum Error {

    ERROR_000("000", 1, "No error"),
    ERROR_001("001", 1, "Connection error"),
    ERROR_002("002", 1, "Error sending reversal or batch capture process"),
    ERROR_003("003", 1, "Error after authorization – message sent" +
                        "to host and answer received"),
    ERROR_004("004", 1, "Error sending message for authorization"),
    ERROR_005("005", 1, "Error receiving message from host");

    private final String code;
    private final int position;
    private final String description;
    private static final Map<String, Error> errorMap =
        new HashMap<String, Error>();

    static {
        for (Error error : Error.values()) {
            errorMap.put(error.code, error);
        }
    }

    Error(final String code, final int position, final String description) {
        this.code = code;
        this.position = position;
        this.description = description;
    }

    public static Error getError(String code) {
        return errorMap.get(code);
    }
    // add getters and setters here:
    public String getCode() { return this.code; }
    public int getPosition() { return this.position; }
    public String getDescription() { return this.description; }
}
于 2012-07-04T11:28:19.550 に答える
2

enum を使用して構造を構築できます。

public enum Error {

   public final int code;
   public final String message;

   e0 (000, "No Error"),
   e1 (001, "Connection error");

   public Error(int code, String message) {
      this.code = code;
      this.message = message;
   }

   public static Error byCode(int code) {
        return Error.valueOf("e"+code); // you may add try/catch on IllegalArgumentException, etc.
   }
}

必要なだけアクセサーを追加できます (静的であろうとなかろうと、たとえば静的な HashMap を使用してメッセージで検索できます)。

java 1.5 以降、switch ステートメントで列挙値を使用できます。

于 2012-07-04T11:18:22.197 に答える
1

java.util.Map実装(HashMap)を使用します。キーとしてエラーコードを使用し、値として説明を使用します。

于 2012-07-04T11:16:44.590 に答える
0
enum ErrorCode{
 001,002
}

class ErrorWrapper{
 private ErrorCode errorCode;
 private String description;
 //setters + getters    
}

持っているMap<ErrorCode, List<ErrorWrapper>>

于 2012-07-04T11:15:56.757 に答える
0

使用するだけ

HashMap<String, String> 

エラーコードは文字列であり、説明も文字列であると述べたためです。

于 2012-07-04T11:17:09.563 に答える
0

まず第一に、「エラーは決して変わらない」は近い将来間違っているでしょう:)

プロパティ ファイルを使用して、これらのエラー コードと説明を保存します (必要に応じて、「位置」データを解析できます)。

Properties properties = new Properties();
    try {
        properties.load(new FileInputStream("errors.properties"));
    } catch (IOException e) {}

次に、 getError メソッドは次のようになります。

public String getError(String errorCode){
     return properties.getProperty(errorCode);
}

errors.properties ファイルは次のようになります。

001=No error
002=Connection error

よりダイナミックになると思います

于 2012-07-04T11:24:33.537 に答える
0

Javaenumはあなたの問題にぴったりです。新しいエラー コードを追加したり、既存のコードを変更したりするという点で、もう少し柔軟な別のアプローチを考えることができます。

  1. 次のようなエントリでプロパティ ファイルを作成します。
    • 000-1=エラーなし
    • 001-1=接続エラー
  2. このファイルを jar にバンドルして、開発者に配布します。
  3. クラスを作成し、jar 内からこのファイルを読み取り、これらの名前と値のペアのマップ (またはハッシュマップ) を作成するコードを配置します。
  4. このコードを静的ブロックに入れて、クラスがロードされた瞬間に HashMap が初期化されるようにします。
  5. このメソッドは、単に入力エラー コードにgetError(ERROR_CODE)追加してこの Map をクエリし、適切なエラー メッセージを返します。-1
  6. 新しいメッセージを追加したり、既存のメッセージを変更したりするには、プロパティ ファイルの内容を変更するだけです。コードの変更は必要ありません。
于 2012-07-04T12:06:37.877 に答える
0

私はあなたのために何かを書きました。テストコードが含まれています。デフォルトのパッケージでクラス Main を作成し、コードをコピーして貼り付けて実行するだけです。クラス Errors のメソッド getError(String code) を使用して、コードでエラー メッセージを取得できます。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        for(String code : new String[]{"000", "001", "002", "003", "004", "005"}) {
            System.out.println(Errors.getError(code));
        }
    }
}
class Errors {
    static {
        Errors.errors = new HashMap<String, Error>();
        for(String[] error : new String[][]{
                {"000", "1", "No error"},
                {"001", "1", "Connection error"},
                {"002", "1", "Error sending reversal or batch capture process"},
                {"003", "1", "Error after authorization – message sent to host and answer received"},
                {"004", "1", "Error sending message for authorization"},
                {"005", "1", "Error receiving message from host"}
        }) {
            Errors.errors.put(error[0], new Error(error[0], error[1], error[2]));
        }

    }
    private static Map<String, Error> errors;
    public static String getError(String code) {
        return Errors.errors.get(code).message;
    }
    private static class Error {
        private String code;
        private String position;
        private String message;
        public Error(String code, String position, String message) {
            super();
            this.code = code;
            this.position = position;
            this.message = message;
        }
        @Override
        public String toString() {
            return this.getClass().getSimpleName() + " | code: " + this.code + " | position: " + this.position + " | message: " + this.message;
        }
    }
}
于 2012-07-04T11:41:01.507 に答える