0

サーバーの名前とポートを格納するプロパティ ファイルがあります。これらの値はEnum、コードに触れずに値を変更できるようにするために、 で使用されます。

プロパティの内容は次のようになります。

PROD=FTPROD01:1122

これらの値をメソッドのパラメーターとして使用しているため、サーバーとポート番号を分割する必要があります。

server = properties.getProperty(this.name(), "").split(":")[0];
try {
port = Integer.valueOf(properties.getProperty(this.name(), "").split(":")[1]);
} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("error");
}

ご覧のとおりArrayIndexOutOfBoundsException、プロパティ ファイルが「破損」している場合にプログラムがクラッシュするため、2 番目の値が欠落しているかどうかを検出するために、ランタイム例外である をキャッチします。

これは複数の値を取得する良い方法ですか、それともよりエレガントな他のアプローチはありますか?

4

5 に答える 5

5

これは複数の値を取得する良い方法ですか、それともよりエレガントな他のアプローチはありますか?

確かに-無効な長さで配列にアクセスしようとしないでください-他のことをする前にそれを検出してください。

String[] bits = properties.getProperty(this.name(), "").split(":");
if (bits.length == 2) {
  server = bits[0];
  port = Integer.valueOf(bits[1]); 
} else {
  // Log the corruption or whatever...
}

valueOfがスローされた場合、これはまだ失敗する可能性があることに注意してくださいNumberFormatException

基本的に、最初から挑発を避けることができるキャッチ例外を避ける必要があります。

于 2012-11-16T10:58:42.377 に答える
3

経験則: 通常のフローには例外を使用しないでください。

次のように、配列lengthを使用して存在するかどうかを確認できます。port

String[] arr = String.valueOf(properties.getProperty(this.name(), "").split(":");

server = arr[0];
if(arr.length > 1)
{
    port = Integer.valueOf(arr[1]);
}
于 2012-11-16T11:00:07.907 に答える
2

確かに、それがあなたのために働くなら、それは良い選択肢です:-)

それでも、誰かがあなたに次のようなプロパティファイルを渡したとき、あなたはどうしますか?

PROD=

ヒント: try/catch を展開し、おそらく PROD がない場合のデフォルトを準備してください :-)

乾杯、

于 2012-11-16T10:59:15.143 に答える
1

この前にチェックを入れて、プロパティ値を確認 できます
if(properties.getProperty(this.name(), "").split(":").length > 1)
。この方法で、例外処理コードを削除できます:)

于 2012-11-16T11:02:34.047 に答える
0

単に次のようなプロパティを持っている

PROD.SERVER=FTPROD01
PROD.PORT=1122

プロパティは、主にキーと値を意味します。

于 2012-11-16T11:00:27.377 に答える