Существует много различий. Мы любили WPF за:
Однако мы придерживались Windows Forms потому что:
В Java рекомендуется использовать типы интерфейса, а не конкретные классы в API.
Ваша проблема в том, что вы используете ArrayList
(вероятно, во многих мест), где вы действительно должны использовать Список
. В результате вы создали себе проблемы с ненужным ограничением, что список представляет собой ArrayList
.
Вот как должен выглядеть ваш код:
List input = new ArrayList(...);
public void doSomething(List input) {
List inputA = input.subList(0, input.size()/2);
...
}
this.doSomething(input);
Предлагаемое вами «решение» проблемы было / это:
new ArrayList(input.subList(0, input.size()/2))
Это работает путем создания копии подсписка. Это не кусок в обычном понимании. Кроме того, если подсписок большой, создание копии будет дорогостоящим.
Если вы ограничены API, которые вы не можете изменить , то вы должны объявить ] inputA
как ArrayList
, возможно, вы сможете реализовать собственный подкласс ArrayList
, в котором метод subList
возвращает подкласс ArrayList
. Однако:
ArrayList
. ArrayList
, чтобы вместо этого создать экземпляры вашего подкласса. "копия" решение "массив" более практично ... учитывая, что это не настоящие срезы.
Если нет существующего метода, я думаю, вы можете выполнить итерацию от 0 до input.size () / 2
, беря каждый последующий элемент и добавляя его в новый ArrayList .
РЕДАКТИРОВАТЬ : На самом деле, я думаю, вы можете взять этот List и использовать его для создания нового ArrayList, используя один из конструкторов ArrayList .
Вот как я это решил. Я забыл, что подсписок был прямой ссылкой на элементы в исходном списке, поэтому понятно, почему это не сработало.
ArrayList<Integer> inputA = new ArrayList<Integer>(input.subList(0, input.size()/2));