Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要返回数组的副本?_Java_Solr_Dataimporthandler - Fatal编程技术网

Java 为什么要返回数组的副本?

Java 为什么要返回数组的副本?,java,solr,dataimporthandler,Java,Solr,Dataimporthandler,我正在阅读solr的dataimporthandler组件的源代码。我遇到一个问题 private List<String> readBySplit(String splitBy, String value) { String[] vals = value.split(splitBy); List<String> l = new ArrayList<String>(); l.addAll(Arrays.asList(vals));

我正在阅读solr的dataimporthandler组件的源代码。我遇到一个问题

  private List<String> readBySplit(String splitBy, String value) {
    String[] vals = value.split(splitBy);
    List<String> l = new ArrayList<String>();
    l.addAll(Arrays.asList(vals));
    return l;
  }
private List readBySplit(字符串分隔符,字符串值){
字符串[]VAL=value.split(splitBy);
列表l=新的ArrayList();
l、 addAll(Arrays.asList(vals));
返回l;
}
↑ 清单1(来自RegexTransformer类的方法)

private List readBySplit(字符串分隔符,字符串值){
字符串[]VAL=value.split(splitBy);
返回数组.asList(VAL);
}
↑ 清单2(我认为上面的方法应该是)

有谁能告诉我以上两个代码清单之间的显著区别吗?谢谢。

数组。asList()
返回指定数组支持的固定大小的列表。

这是javadoc的。所以,如果您想要一个动态大小的列表,您需要第一个代码。

数组。asList()返回固定大小的列表,它是未修改的列表。您无法对其执行添加/删除操作,执行此操作时将引发
异常
不支持操作异常


因此,如果要对列表执行某些操作,则第一种方法是合适的,因为它返回的是固定大小的列表,所以不能在列表中添加任何内容(按代码2返回)。您将得到“java.lang.UnsupportedOperationException
但您可以添加到列表中,返回代码为1。

他仍然可以修改列表,只是不能更改大小修改意味着添加/删除。您不能在该列表中添加/删除try:`String[]a={“1”、“2”、“3”};列表b=数组。asList(a);b.set(1,“哈哈”);系统输出打印ln(b)`这不是添加新元素/删除。我只提到了添加和删除,你说“这是未修改的列表”,你说“修改意味着添加/删除”。无论如何,无论措辞的最初意图是什么,我认为现在已经很清楚,用这种列表可以做什么,不能做什么。
  private List<String> readBySplit(String splitBy, String value) {
    String[] vals = value.split(splitBy);
    return Arrays.asList(vals);
  }