У Java є гарною практикою використовувати типи інтерфейсів, а не конкретні класи в API.
Ваша проблема полягає в тому, що ви використовуєте ArrayList(можливо, у багатьох місцях), де вам справді слід було б користуватися List. В результаті ви створили собі проблеми з непотрібним обмеженням, яким є список 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екземпляри, щоб замість цього створити екземпляри вашого підкласу.
Рішення "скопіювати масив" є більш практичним ... маючи на увазі, що це не справжні фрагменти.
ArrayList? Я думаю , що ви , можливо , чи не вистачає трохи розуміння того, як інтерфейси працюють , тому щоListіArrayListне є «несумісними» -ArrayListзнаряддяList, і ,Listймовірно , містить всі необхідні методи вам потрібно.