Иногда я выгляжу совершенно неэффективно. Когда я почти закончил набирать это, мне удалось найти соответствующий отчет об ошибке в Sun. Я тогда хорошо подумал, может с таким же успехом опубликовать его, имея скриншот и все. Ответ следует.
Я знаю, "SELECT не сломан", и это всегда моя вина. Но здесь я действительно не понимаю, почему это должно быть. Мой фрагмент кода:
List<IGraphEdge> rgSrc = this._rgGetPath();
List<IGraphEdge> rgDst = new ArrayList<IGraphEdge>(rgSrc.size());
Collections.copy(rgDst, rgSrc);
Это выдает IndexOutOfBoundException
с сообщением
java.lang.IndexOutOfBoundsException: Source does not fit in dest
at java.util.Collections.copy(Collections.java:548)
В отладчике, когда я захожу в Collections.copy, два экземпляра ArrayList
выглядят так:
Вид отладчика http://static.theuprightape.net/ql/img/debugger.png
Итак, в dest
есть возможность удерживать этот элемент из src
, хотя, естественно, size
из dest
по-прежнему равно 0, в конце концов, это то, что я хочу изменить, вызвав copy()
.
Глядя на исходный код реализации OpenJDK, становится понятно, почему выдается ошибка:
public static <T> void copy(List<? super T> dest, List<? extends T> src) {
int srcSize = src.size();
if (srcSize > dest.size())
throw new IndexOutOfBoundsException("Source does not fit in dest");
Так скажите, пожалуйста, это ошибка или что я делаю не так?