Is it possible to batch initialize some regular variables in Java in a loop? Here 'regular' means those variables are initialized alike.
E.g
Button btn1;
Button btn2;
Button btn3;
Button btn4;
btn1 = new Button(parentComposite, SWT.CHECK);
btn1.setText("Button1");
btn1.setSelection(true);
btn1.setEnabled(true);
btn1.setEnabled(true);
btn1.addSelectionListener(bottonAdapter);
bt2 = new Button(parentComposite, SWT.CHECK);
btn2.setText("Button2");
btn2.setSelection(true);
btn2.setEnabled(true);
btn2.setEnabled(true);
btn2.addSelectionListener(bottonAdapter);
btn3 = new Button(parentComposite, SWT.CHECK);
btn3.setText("Button3");
btn3.setSelection(true);
btn3.setEnabled(true);
btn3.setEnabled(true);
btn3.addSelectionListener(bottonAdapter);
btn4 = new Button(parentComposite, SWT.CHECK);
btn4.setText("Button4");
btn4.setSelection(true);
btn4.setEnabled(true);
btn4.setEnabled(true);
btn4.addSelectionListener(bottonAdapter);
As you see,the 4 buttons are initialized totally the same way. The only difference is that the variable name starts with the same word 'btn'
and ends up with a increased number.
So can those buttons be initialized in a loop by reflection or dynamic proxy or something else?
The simplest approach would just be to create a method to do that:
private Button createButton(String text) {
Button ret = new Button(parentComposite, SWT.CHECK);
ret.setText(text);
ret.setSelection(true);
ret.setEnabled(true);
ret.addSelectionListener(buttonAdapter);
}
Then:
Button btn1 = createButton("Button1");
Button btn2 = createButton("Button2");
Button btn3 = createButton("Button3");
Button btn4 = createButton("Button4");
You should also consider using a collection instead of four separate variables, if you want to be able to do further processing in a homogenous way. Then you could do it in a loop:
List<Button> buttons = new ArrayList<>();
for (int i = 1; i <= 4; i++) {
Button button = new Button(parentComposite, SWT.CHECK);
button.setText("Button" + i);
button.setSelection(true);
button.setEnabled(true);
button.addSelectionListener(buttonAdapter);
buttons.add(button);
}
See more on this question at Stackoverflow