Make a method that will return a list of your fields. For example:
class TestRecord { int field1; int field2; int filed3; List<Object> getFields() { return Arrays.asList(field1, field2, filed3); } }
Then use it:
excelTargets.add(new ExcelTarget(sheetName, row, columns[i], a.getFields().get(i)));
If your Records class cannot be edited, you can extend its functionality using inheritance or composition. Inheritance:
class TestRecord { private int field1; private int field2; private int filed3; public int getField1() { return field1; } public int getField2() { return field2; } public int getFiled3() { return filed3; } } class MyTestRecord extends TestRecord { List<Object> getFields() { return Arrays.asList(getField1(), getField2(), getFiled3()); } }
Composition:
TestRecord record = new TestRecord(); List<Object> fields = Arrays.asList(record.getField1(), record.getField2(), record.getFiled3()); excelTargets.add(new ExcelTarget(sheetName, row, columns[i], fields.get(i)));
If all the same, none of the proposed options is not suitable, you can use java reflection.
class TestRecord { private int field1 = 1; private int field2 = 2; private int filed3 = 3; } TestRecord record = new TestRecord(); List<Object> values = new ArrayList<>(); Field[] fields = TestRecord.class.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); values.add(field.get(record)); }