首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一段代码求解,final的有关问题

2012-02-07 
一段代码求解,final的问题package gameimport java.awt.event.MouseAdapterimport java.awt.event.Mouse

一段代码求解,final的问题
package game;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

import heroes.Hero;

import javax.swing.BoxLayout;
import javax.swing.JDialog;

public class HeroChoosingDialog extends JDialog {
View myView;
boolean answerable =false;
//下面这一句用final对么,因为如果不用final的话,我的编译器会在 mouseClicked()内部报错。
//但是我实在很迷惑 final用在parameter上表示的是什么? 是不是只初始化一次之后,再也不能改变?
public HeroChoosingDialog(final View myView){  
super(myView, "Choose Your Hero");
setModal(false);
this.myView = myView;
setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
this.setVisible(true);
this.setAlwaysOnTop(true);
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e){
if(answerable){
for(Hero every: heroes){
if(e.getSource().equals(every)){
answerable = false;
myView.heroChosen(every);
break;
}
}
}
}
});
;
this.pack();
answerable = true;
}
ArrayList<Hero> heroes;
public void addHero(Hero h){
heroes.add(h);
add(h);
pack();
}
}


[解决办法]
方法参数用在匿名内部类的时候,必须指定为final的。
[解决办法]
用不着final

myView.heroChosen(every);//和成员名和参数名一样,没有加this默认为参数了,所以才要加final
改成
this.myView.heroChosen(every);
就行了

final是用来声明引用是不可变的,就这个程序而言可以不需要这个声明
[解决办法]

探讨

3楼你确定么?你不加final能编译通过?自己好好试过再说吧。

[解决办法]
三楼正解,里面在调用外部的局部参数时,这个局部参数必须是final的,如果是实例变量或者静态变量就可共用。

热点排行