【发布时间】:2017-05-09 08:07:10
【问题描述】:
我只是好奇。有没有办法访问另一个匿名类中的匿名类中的父级?
我让这个例子创建一个JTable 子类(匿名类)覆盖changeSelection 并在里面创建另一个匿名类。
MCVE:
public class Test{
public static void main(String args []){
JTable table = new JTable(){
@Override
public void changeSelection(
final int row, final int column,
final boolean toggle, final boolean extend) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
super.changeSelection(row, column, toggle, extend);
//more code here
}
});
}
};
}//end main
}//end test
如何参考super.changeSelection(..) ?
【问题讨论】:
-
根据经验,当我阅读“外部匿名类”时,我认为“听起来这值得重构”。匿名类很棒,但它们可能会被过度使用。如果您在其他类中有类,请考虑至少定义一个命名的内部类,如果不是适当的公共类。我愿意打赌,它会更易于使用且阅读更清晰。
-
这类问题的解决方案通常不会比“我将创建一个命名的封闭类”更复杂。唯一的缺点是您的代码不会彼此相邻,但是对超出范围后立即被垃圾收集的类实例的单个引用不会带来性能劣势,可能允许您使用静态嵌套类作为封闭类,实际上可能使您的实现更简洁,更易于阅读。
-
@nachokk:下面有几个正确答案;如果你觉得有帮助,你应该接受其中之一。
-
@JasonC 我还在等待其他答案,感谢您的帮助,并进行投票。
标签: java anonymous-class