下面这段关于匿名类的代码编译时总是出错,奇怪的是我觉得并没有提示的错误!
代码段:
listDepart.addActionListener(new ClassSelectionAction() implements ActionListener{
//react action on JLists and buttons
public void actionPerformed(ActionEvent e){
//some codes
}
});报错信息:
')' expected
listDepart.addActionListener(new ClassSelectionAction() implements ActionListener{另一半‘)’在最后一行的分号前呀,并没有遗漏‘)’。
请问哪位能帮忙解疑吗?
代码段:
listDepart.addActionListener(new ClassSelectionAction() implements ActionListener{
//react action on JLists and buttons
public void actionPerformed(ActionEvent e){
//some codes
}
});报错信息:
')' expected
listDepart.addActionListener(new ClassSelectionAction() implements ActionListener{另一半‘)’在最后一行的分号前呀,并没有遗漏‘)’。
请问哪位能帮忙解疑吗?
解决方案 »
- Comparator排序题
- 急!急!!急!!!请问 .jspf文件是什么?
- 一个日历的源码 好多不懂 请赐教
- 请高手帮忙写下大数的四则运算
- 急死了!!关于jacob配置的问题,各位大侠帮帮忙啊~~
- java的两个问题?
- 请教:Swing中怎么让新窗口居中显示?
- 如何得到本地默认网关和子网掩码?
- 在win2000+AE4环境上操作系统经常重起如何解决?发言有分
- 如何在JTable的不同行不同列里显示不同的组件,每一个方格里一个控件
- 在线求助高手?JTable的某列加入JCheckBox一闪就过去了,看到的是true 和false 而不是一个方框里打对勾的效果
- 不懂就问: 怎么设置 java.endorsed.dirs?!
//react action on JLists and buttons
public void actionPerformed(ActionEvent e){
//some codes
}
});
listDepart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { }
});
能工作就行了,一般也是这样用的,你的那种形式太罕见了.
匿名类是定义在方法体中的一种类,可以实现接口或者继承其他的类,但是不能有任何明确的构造器,默认为final类,不能被abstract static修饰符修饰,一般用于即时处理一些临时问题而没有必要复用的一种类。
你看这样理解可以吗?
如果答案是yes的话,我的方法似乎没问题啊?哪位能帮忙解释为什么通过匿名类实现借口的形式不对呢?
new ClassSelectionAction() implements ActionListener
你这个ClassSelectionAction是什么?是你的匿名类的类名?匿名类还有类名吗?矛盾!
public void actionPerformed(ActionEvent e){
//some codes
}
}这样就可以了,匿名类是不能IMPLEMENTS或EXTENDS的,因为IMPLEMENTS是实现接口,怎么能用new创建对象呢,EXTENDS是继承抽象类,抽象类也是不能创建对象的
呵呵,初学者吧,没关系,这些常见错误多学学就会了
上述各位所说的两种方法方法我能理解(一种是匿名类实现接口,另外一种通过实名类实现)。但是想再问一句: 如果还是通过匿名类实现的话,new 后面不用接口名而是超类名(匿名类所继承自的超类)也可以吧?
//react action on JLists and buttons
public void actionPerformed(ActionEvent e){
//some codes
}
});
上面是对的,你写的就不叫匿名类了啊,已经给了名字啊。在使用匿名类时,应该直接使用new关键字后面紧跟需要实现的接口名就可以,在里面实现需要实现的方法。
那new 后面跟超类名然后再加所创建的匿名类类体也可以实现匿名类吧?
-----------
接口也是一个超类,这样的说法当然是对的,楼主可能有些概念没搞清楚吧