Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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 为什么listIterator参数应该是AbstractList源代码中的最终参数?_Java_List_Api - Fatal编程技术网

Java 为什么listIterator参数应该是AbstractList源代码中的最终参数?

Java 为什么listIterator参数应该是AbstractList源代码中的最终参数?,java,list,api,Java,List,Api,当我查看JavaAPI的源代码时,我就是不明白为什么这个参数应该是final public ListIterator<E> listIterator(final int index) { rangeCheckForAdd(index); return new ListItr(index); } 公共ListIterator ListIterator(最终整数索引){ rangeCheckForAdd(索引); 返回新的ListItr(索引); } 这是A

当我查看JavaAPI的源代码时,我就是不明白为什么这个参数应该是final

    public ListIterator<E> listIterator(final int index) {
    rangeCheckForAdd(index);

    return new ListItr(index);
}
公共ListIterator ListIterator(最终整数索引){
rangeCheckForAdd(索引);
返回新的ListItr(索引);
}

这是AbstractList的第324行。谢谢

final
,这意味着该方法无法更改参数的值。这主要在代码文档/限制中有用,使编译器将修改它的尝试变成错误。它也可能是编译器和/或JVM用于优化目的的有用信息;e、 例如,他们不必应用静态分析来查看参数是否从未更改,您已经强迫它为真。当使用常量值调用方法调用时,这可能是内联方法调用时特别有用的信息,例如在的实现中(不带参数),简单地说:
return listierator(0)

final
这意味着该方法无法更改参数的值。这主要在代码文档/限制中有用,使编译器将修改它的尝试变成错误。它也可能是编译器和/或JVM用于优化目的的有用信息;e、 例如,他们不必应用静态分析来查看参数是否从未更改,您已经强迫它为真。当使用常量值调用方法调用时,这可能是内联方法调用时特别有用的信息,例如在的实现中(不带参数),简单地说:
return listierator(0)

是否只是为了优化目的?如果不是最终的,此参数不会导致任何问题?@zhaoch93:同样,也是在代码文档中。不,如果不是
final
,就不会有问题。我不知道这是否会改变编译器和/或JVM可以应用的优化,或者他们是否需要首先更加努力(弄清楚它从未改变)。这只是为了优化目的吗?如果不是最终的,这个参数不会导致任何问题?@zhaoch93:同样,在代码文档中。不,如果不是
final
,就不会有问题。我不知道这是否会改变编译器和/或JVM可以应用的优化,或者他们是否需要首先更加努力工作(弄清楚它从未改变)。