【问题标题】:C# => JAVA: Filling a static ArrayList on declaration. Possible?C# => JAVA:在声明时填充静态 ArrayList。可能的?
【发布时间】:2011-01-04 08:54:41
【问题描述】:

在我的 C# 项目中,我有一个静态列表,在声明时会立即填充。

  private static List<String> inputs = new List<String>()
        { "Foo", "Bar", "Foo2", "Bar2"};

我将如何使用 ArrayList 在 Java 中执行此操作?

我需要能够在不创建类实例的情况下访问这些值。 可能吗?

【问题讨论】:

  • (您可能希望将字段设为final。)

标签: c# java list arraylist


【解决方案1】:

您可以使用Double Brace Initialization。 它看起来像:

private static List<String> inputs = new ArrayList<String>()
  {{ add("Foo");
    add("Bar");
    add("Foo2");
    add("Bar2");
  }};

【讨论】:

  • IMO 这是最好的答案,因为它不依赖于帮助类 java.util.Arrays。
  • 但它确实创建了一个有点隐藏的匿名内部类。主观判断这是否是一个更好的权衡。
【解决方案2】:

我不明白你的意思

能够在没有 创建类的实例

但以下 Java 中的 sn-p 代码在 Java 中的效果与您的几乎相同:

private static List<String> inputs = Arrays.asList("Foo", "Bar", "Foo2", "Bar2");

【讨论】:

  • 因为它是一个静态字段,它确实应该是不可变的。不幸的是,这增加了冗长。 private static final List&lt;String&gt; inputs = Collections.unmodifiableList(Arrays.asList("Foo", "Bar", "Foo2", "Bar2"));。应该在 JDK7 中获取列表文字。
  • 是的,不那么冗长,稍后回答会胜出吗? (没有冒犯你,MAK。只是陈述我认为的事实。)
  • @jdmichal:我想你的答案是在我还在写我的时候发布的——否则我就不会费心再说同样的话了。我猜最慢的枪赢了:)。
  • 我经常喜欢运行new ArrayList&lt;&gt;(Arrays.asList(...)),因为Arrays.asList() 不会产生List 的完整实现,但ArrayList 会产生。如果必须重复执行此操作会稍微慢一些,但如果是一次性交易,那就没问题了。
【解决方案3】:

您可以通过将它们括在静态{}括号中来进行静态调用,如下所示:

private static final List<String> inputs = new ArrayList<String>();

static {
  inputs.add("Foo");
  inputs.add("Bar");
  inputs.add("Foo2");
  inputs.add("Bar2");
}

【讨论】:

  • 很好,我不知道。
【解决方案4】:

您需要将其作为ArrayList,还是只是一个列表?

以前的:

private static java.util.List<String> inputs = new java.util.ArrayList<String>(
    java.util.Arrays.<String>asList("Foo", "Bar", "Foo2", "Bar2"));

后者:

private static java.util.List<String> inputs =
    java.util.Arrays.<String>asList("Foo", "Bar", "Foo2", "Bar2");

java.util.Arrays#asList(...) API

【讨论】:

    【解决方案5】:

    您可以从Guava 享受ImmutableList

    ImmutableList&lt;String&gt; inputs = ImmutableList.of("Foo", "Bar", "Foo2", "Bar2");

    this youtube video 的前半部分非常详细地讨论了不可变集合。

    【讨论】:

      猜你喜欢
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 2013-11-07
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      相关资源
      最近更新 更多