java - 是否可以在 Java 中批量初始化常规变量?

标签 java dynamic reflection initialization

是否可以在循环中批量初始化Java中的一些常规变量?这里的“常规”意味着这些变量的初始化方式相同。

例如

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' 开头,并以增加的数字结尾。

那么这些按钮是否可以通过反射或动态代理或其他方式在循环中初始化?

最佳答案

最简单的方法就是创建一个方法来做到这一点:

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);
}

关于java - 是否可以在 Java 中批量初始化常规变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24057426/

相关文章:

java - Gson 和数组

java - 为什么在gradle中有两种创建任务的方式?

javascript - 无需服务器端脚本即可跨多个页面链接导航栏

linq - 如何使用带 IEnumerable(Of T) 的 System.LINQ.Dynamic 程序集

c# - 检查对象的实例是否是只读的

java - 如何在 java swing 应用程序中嵌入 Mozilla firefox 17?

java - 如何在每个java Restful服务中使用一个apache Camel上下文对象

c# - 未为动态泛型解析方法

pointers - 检查基础类型是否是具有反射的结构

java - 扩展/实现使用反射加载的类/接口(interface)