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

如果你想循环使用它们,我会认为它们在某种程度上是同质的。此外,变量名称 ( s1, s2, s3) 就其本身而言毫无意义。所以去数组(或使用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 回答