Access a Java variable by name as a string

I declared 10 ArrayListwith names arraylist1, arraylist2etc.

I want to dynamically change the variable name in a for loop:

for (int i = 1; i < 5; i++)
{
   arraylist + (i).clear();
   //arraylist1.clear();
   //arraylist2.clear();
   //arraylist3.clear();
   //arraylist4.clear();
   //arraylist5.clear();

}

Is it possible? If so, what is this format?

+4
source share
3 answers

You cannot address a variable with its name as a string (except with reflection, but this is an overflow for this task).

You can add all of these ArrayList to another list. This is more flexible and therefore a better option.

List<List<ContactDetails>> lists2 = new ArrayList<List<String>>();
for (int i = 0; i < 10; i++) {
    lists2.add(new ArrayList<ContactDetails>());
}

Or add them to the array and access them by array indices:

@SuppressWarnings("unchecked")
List<ContactDetails>[] lists = new List[10];
for (int i = 0; i < lists.length; i ++) {
    lists[i] = new ArrayList<ContactDetails>();
}

Now:

for (int i = 1; i < 5; i++)
{
   lists[i].clear();
   lists2.get(i).clear();
}

Since both lists are Iterable and you can use foreach :

for (List list : lists)
{
   list.clear();
}

for (List list : lists2) {
    list.clear();
}

, Lambdas/Stream API, .

+8

ArrayList , reflection:

((ArrayList) getClass().getField("arraylist" + i).get(this)).clear();
+1

You can also do this with reflection. But I do not recommend this.

public class SoTest {

    @Test
    public void testWithReflection() throws Exception {
        final MyClass myClass = new MyClass();
        for (int i = 0; i < 10; i++) {
            final Field field = myClass.getClass().getDeclaredField("list" + i);
            field.setAccessible(true);
            final List<String> value = (List<String>) field.get(myClass);
            value.clear();
        }
    }

    class MyClass {
        private List<String> list0 = new ArrayList<>();
        private List<String> list1 = new ArrayList<>();
        private List<String> list2 = new ArrayList<>();
        private List<String> list3 = new ArrayList<>();
        private List<String> list4 = new ArrayList<>();
        private List<String> list5 = new ArrayList<>();
        private List<String> list6 = new ArrayList<>();
        private List<String> list7 = new ArrayList<>();
        private List<String> list8 = new ArrayList<>();
        private List<String> list9 = new ArrayList<>();
    }
}
+1
source

All Articles