Я предполагаю, что либо fetchPreDetails
является мутировавшей коллекцией setPreParameters()
, либо setPreParameters()
изменяет некоторые другие общие состояния, так что коллекция, на которую ссылается temparrLst
, изменяется при втором вызове setPreParameters()
.Т.е.
List<String> strings = new ArrayList();
strings.add("a");
strings.add("b");
List<String> otherStrings = strings;
otherStrings.add("c");
Я предполагаю, что ваш код предполагает, что strings
будет содержать "a" и "b", а otherStrings
будет содержать "a", "b" и "c".Это не то, как ссылки на объекты работают в Java.Строка List<String> otherStrings = strings;
заставляет strings
и otherStrings
указывать на одну и ту же коллекцию, и, следовательно, изменения, сделанные с использованием любого имени, влияют на одну и ту же вещь.
Редактировать: Ваша новая публикацияКод, кажется, подтверждает мою гипотезу.У вас есть переменная с именем arrLstData
, которую вы очищаете, заполняете и возвращаете при каждом вызове setPreParameters()
.Вы возвращаете одну и ту же коллекцию каждый раз, когда вызываете этот метод.Поэтому у вас есть несколько дескрипторов одной коллекции вместо нескольких коллекций.Вам нужно создать новую коллекцию и возвращать ее каждый раз, когда вы звоните setPreParameters()
.
Редактируйте снова: Возможно, это прояснит ситуацию.Вот что вы делаете:
public static void main(String[] args) {
Foo f = new Foo();
List<String> list1 = f.getList("a", "b");
System.out.println(list1);
List<String> list2 = f.getList("c", "d");
System.out.println(list2);
System.out.println(list1);
}
static class Foo {
private List<String> myList = new ArrayList<String>();
public List<String> getList(String... strings) {
myList.clear();
myList.addAll(Arrays.asList(strings));
return myList;
}
}
Обратите внимание, что это именно то поведение, которое вы описываете, и правильный способ его решения выглядит примерно так:
public static void main(String[] args) {
Foo f = new Foo();
List<String> list1 = f.getList("a", "b");
System.out.println(list1);
List<String> list2 = f.getList("c", "d");
System.out.println(list2);
System.out.println(list1);
}
static class Foo {
public List<String> getList(String... strings) {
List<String> result = new ArrayList<String>();
result.addAll(Arrays.asList(strings));
return result;
}
}