4

テストコンテンツを含むフィールドを持つテストクラスがあります。次のようになります。

class Test {
  public static String s1 = " ... long string ... ";
  public static String s2 = " ... long string ... ";
  public static String s3 = " ... long string ... ";
}

これらのフィールドをループで使用したいので、追加の配列を作成しました

  public static String[] a = {s1, s2, s3};

この構造は正常に機能しますが、フィールドを追加または削除するたびに配列も変更する必要があるため、少し見苦しいです。

配列を手動で操作せずにコードを再構築する唯一の解決策は、すべてを一度に配列に書き込むことです。

class Test {
  public static String[] a = {" ... long string ... ", " ... long string ... ",
                              " ... long string ... "};
}

ご覧のとおり、これにより、特に10を超える長い文字列を処理する必要がある場合に、コードが読み取れなくなります。

より良い構造は何でしょうか?

4

3 に答える 3

3

それらをループで使用したい場合、それらは何らかの形で同質であると思われます。また、変数名 ( s1s2s3) はそのままでは意味がありません。したがって、配列を使用してください(またはArrays.asList()イディオムを使用してください)。

各文字列が異なる意味を持ち、別々に使用される場合は、必ず別々の変数を使用してください。両方の長所を持ちたい場合 (個別の変数と簡単に保守できるリストを使用する場合は、これを検討してください):

class Test {
    public static final String s1 = str(" ... long string ... ");
    public static final String s2 = str(" ... long string ... ");
    public static final String s3 = str(" ... long string ... ");

    public static final List<String> strings = new ArrayList<>();

    public static String str(String s) {
        strings.add(s);
        return s;
    }
}

final最後になりましたが、キーワードについて覚えておいてください。

于 2012-11-09T21:06:00.503 に答える
1

別のアプローチは、enum例えばを使用することです

public enum Test
{
    S1("... long string 1..."), 

    S2("... long string 2...");

    private String value;

    Test(String value)
    {
        this.value = value;
    }

    public String getValue()
    {
        return value;
    }
}

次に、インスタンスに個別に、またはリストとしてアクセスできます。例:-

public static void main(String[] args)
{
    /* Single instance */
    String value1 = Test.S1.getValue();

    /* All instances */
    for (Test test : Test.values())
    {
        System.out.println(test.getValue());
    }
}

このアプローチでは、新しい値を追加または削除するときに配列を変更することを心配する必要はありません。

于 2012-11-09T21:27:01.930 に答える
0

リストについて考えたことはありますか?文字列の順序を気にしない場合、これは良い解決策です。実装は非常に簡単で、必要な数の要素を追加または削除できます。 ウィキペディア - リスト

于 2012-11-09T21:04:47.160 に答える