【问题标题】:declaring elements of an array final (not just the array itself)声明数组最终的元素(不仅仅是数组本身)
【发布时间】:2014-07-23 23:35:28
【问题描述】:

我们可以像这样使数组最终化:final int[] foo = <whatever>;,但是无论如何我可以确保该数组中的每个元素也是最终的吗?

【问题讨论】:

  • @sp00m 不,不是……
  • 仅仅因为两个问题有时有相同的解决方案,这绝不意味着这两个问题是相同的!
  • 那个问题问:“我怎样才能使这个数组不可变?”。这不是你要问的吗?
  • @sp00m 我看不出这个问题与您发布的问题之间的关系。

标签: java final


【解决方案1】:

数组是不可能的。但是,您可以使用 Collections.unmodifiableList 代替:

返回指定列表的不可修改视图。此方法允许模块为用户提供对内部列表的“只读”访问权限。对返回列表的查询操作“通读”到指定列表,并尝试修改返回的列表,无论是直接还是通过其迭代器,都会导致UnsupportedOperationException

正如另一个答案已经表明的那样,这与 Arrays.asList 结合使用效果很好。所以你的数组foo 会写成:

final List<Integer> foo = Collections.unmodifiableList(Arrays.asList(1, 2, 3, ...));

您可以使用foo.get(i),而不是foo[i]

【讨论】:

    【解决方案2】:

    你不能这样做,但你可以使用不可修改的列表:

    List<String> items = Collections.unmodifiableList(Arrays.asList("I", "can", "never", "change"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      相关资源
      最近更新 更多