是否可以在循环中批量初始化Java中的一些常规变量?这里'定期'意味着那些变量都是相似的。
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);
如您所见,4个按钮的初始化方式完全相同。唯一的区别是变量名称以相同的单词'btn'
开头,最后会有更多的数字。
那些按钮可以通过反射或动态代理或其他东西在循环中初始化吗?
答案 0 :(得分:4)
最简单的方法就是创建一种方法:
private Button createButton(String text) {
Button ret = new Button(parentComposite, SWT.CHECK);
ret.setText(text);
ret.setSelection(true);
ret.setEnabled(true);
ret.addSelectionListener(buttonAdapter);
}
然后:
Button btn1 = createButton("Button1");
Button btn2 = createButton("Button2");
Button btn3 = createButton("Button3");
Button btn4 = createButton("Button4");
如果您希望能够以同质的方式进行进一步处理,您还应该考虑使用集合而不是四个单独的变量。然后你可以循环执行:
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);
}
答案 1 :(得分:0)
您可以使用数组初始化这些按钮:
Button[] buttons = new Button[4];
for(int i =0;i< buttons.length(); i++)
{
buttons[i] = new Button(parentComposite, SWT.CHECK);
buttons[i].setText("Button"+(i+1));
buttons[i].setSelection(true);
buttons[i].setEnabled(true);
buttons[i].addSelectionListener(bottonAdapter)
}