如果将JRadioButton设置为final,我该如何更改它?
这是构造函数中的一段代码,其中单选按钮被初始化,当按下复选按钮时,所选单选按钮的值被发送到验证用户答案的方法:
final JRadioButton ANSWER1 = new JRadioButton("Empty 1");
final JRadioButton ANSWER2 = new JRadioButton("Empty 2");
final JRadioButton ANSWER3 = new JRadioButton("Empty 3");
final JRadioButton ANSWER4 = new JRadioButton("Empty 4");
JButton CHECK = new JButton("Check");
CHECK.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if (ANSWER1.isSelected()){
qAnswered(1);
}
if (ANSWER2.isSelected()){
qAnswered(2);
}
if (ANSWER3.isSelected()){
qAnswered(3);
}
if (ANSWER4.isSelected()){
qAnswered(4);
}
}
});
当选择下一个问题按钮时,单选按钮的文本标签需要更改为下一组答案。不幸的是,因为单选按钮设置为final,这会导致应用程序崩溃。
我该怎么办?
答案 0 :(得分:3)
变量的final
关键字表示该变量只能初始化一次,但这并不意味着该对象中的字段无法更改。即使JRadioButton
引用为final
,ANSWER4.setText()
也不会抛出任何最终相关错误。
if (ANSWER1.isSelected()){
qAnswered(1);
ANSWER1.setText("New Text 1"); // This will work
}
有关final
变量的更清晰,来自JLS 4.12.4(强调我的)
变量可以声明为final。最终变量只能分配一次。声明变量final可以作为有用的文档,它的值不会改变,可以帮助避免编程错误。
如果分配了最终变量,那么这是一个编译时错误,除非在分配之前它是明确未分配的(§16)。
空白决赛是一个最终变量,其声明缺少初始值。
一旦指定了最终变量,它总是包含相同的值。如果最终变量包含对象的引用,则可以通过对象上的操作更改对象的状态,但变量将始终引用同一对象。