Tag: anonymous class

访问容器字段

我有一个非常愚蠢的问题要问。 我正在使用NetBeans构建一个小应用程序,我遇到了以下问题; 我的主类叫做mainApp ,正在扩展一个JFrame ,后者又包含一个名为drawingBoard的JPanel ,我也会因为各种(和偏离主题)的原因而扩展。 核心问题是,在某些时候我需要访问mainApp一个字段,但是由于NetBeans实例化我的主类的方式..(作为匿名类)我无法获得对容器的引用(这是我的mainApp)。 如何获取mainApp的引用并在mainApp设置其字段的值?

匿名课程问题

我对这一行有点怀疑: 匿名类无法定义构造函数 那么,为什么我们还可以使用以下语法定义Anonymous类: new class-name ( [ argument-list ] ) { class-body }

是否可以通过某种方式限定最终参数以解决与匿名类成员的命名冲突?

“你为什么要这样做呢?” 尽管如此,有没有办法在不更改最终方法参数名称的情况下完成此操作? private Foo createAnonymousFoo(final Bar bar) { return new Foo() { private Bar bar = SomeUnknownScopeQualifier.bar; public Bar getBar() { return bar; } public void doSomethingThatReassignsBar() { bar = bar.createSomeDerivedInstanceOfBar(); } }; } 显然,如果没有doSomethingThatReassignsBar调用,您将不需要成员Bar等。 在这种情况下,简单的解决方法是将final Bar bar更改为final Bar bar final Bar startBar ,然后分配就可以了。 但出于好奇,是否有可能专门提到final Bar (类似于你说Super.this的方式)?

如何用Java编译匿名类?

我听说Java字节码实际上不支持任何类型的未命名类。 javac如何将未经修改的类转换为命名类?

最后的字段和匿名类

关于匿名课和最终字段的解释我仍然不满意。 有很多问题试图解释明显的问题,但我没有找到所有问题的答案:-) 假设以下代码: public void method(final int i, int j) { final int z = 6; final int x = j; int k = 5; new Runnable() { public void run() { System.out.print(i); System.out.print(x); System.out.print(z); System.out.print(k); } }; } 由于“不完整”的k属性,无法编译此代码。 我知道编译器可以在编译期间用声明的值替换z属性。 当我搜索解决方案时, i和x确切i ,我发现这个答案说: 然后,编译器可以将匿名类中的lastPrice和price的使用替换为常量的值(在编译时,当然),并且您将不再有访问不存在的变量的问题 如果它们是方法的参数,它如何适用于字段i和x ? 在编译期间不知道它们? 这种方法适用于z 。 另一方面,有关于堆栈问题的解释: 这允许Java编译器在运行时“捕获”变量的值,并将副本存储为内部类中的字段。 一旦外部方法终止并且其堆栈框架已被移除,原始变量就会消失,但内部类的私有副本仍然存在于类的自身内存中 我会理解匿名类在创建过程中以某种方式复制了所有必需的内容(字段)。 缺少final有明显的问题,如果匿名类声明下面的某些代码会改变值,则执行使用可能的stale值。 […]

JLS的哪一部分表示匿名类不能拥有public / protected / private成员类

考虑这段代码: public class TopLevelClass { Cloneable c = new Cloneable() { private int privateField; private void privateMethod() {}; }; } 有一个匿名类,它有一个private成员字段和一个private成员方法。 它已成功编译。 然后考虑这个: public class TopLevelClass { Cloneable c = new Cloneable() { private class PrivateInnerClass {} }; } 有一个匿名类,它有一个private成员类。 然而… javac说: error: modifier private not allowed here Eclipse说: Illegal modifier for the local class […]

setOnCheckedChangeListener参数

RadioGroup radioGroup = (RadioGroup) findViewById(R.id.orientation); radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.horizontal: group.setOrientation(LinearLayout.HORIZONTAL); break; case R.id.vertical: group.setOrientation(LinearLayout.VERTICAL); break; } } }); 什么是radioGroup.setOnCheckedChangeListener? 这是一种方法吗? 那么它的论点是什么?

如何从匿名类中访问封闭的类实例变量?

如何从匿名类的方法中访问instance variables ? class Tester extends JFrame { private JButton button; private JLabel label; //..some more public Tester() { function(); // CALL FUNCTION } public void function() { Runnable r = new Runnable() { @Override public void run() { // How do I access button and label from here ? } }; new Thread(r).start(); } […]

将最终变量传递给匿名类

在通过构造函数传递给匿名类的最终变量中 ,Jon Skeet提到变量通过自动生成的构造函数传递给匿名类实例。 在这种情况下,为什么我无法使用reflection看到构造函数: public static void main(String… args) throws InterruptedException { final int x = 100; new Thread() { public void run() { System.out.println(x); for (Constructor cons : this.getClass() .getDeclaredConstructors()) { StringBuilder str = new StringBuilder(); str.append(“constructor : “).append(cons.getName()) .append(“(“); for (Class param : cons.getParameterTypes()) { str.append(param.getSimpleName()).append(“, “); } if (str.charAt(str.length() – 1) == […]

实现ActionListener的Java匿名类?

我最近做了一个编程任务,要求我们在代码中实现一个由UML图指定的程序。 有一次,该图指定我必须创建一个显示计数(从1开始)的匿名JButton,并在每次单击时递减。 JButton及其ActionListener都必须是匿名的。 我提出了以下解决方案: public static void main(String[] args) { JFrame f = new JFrame(“frame”); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(400, 400); f.getContentPane().add(new JButton() { public int counter; { this.counter = 1; this.setBackground(Color.ORANGE); this.setText(this.counter + “”); this.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { counter –; setText(counter + “”); } }); } }); f.setVisible(true); } 这会添加一个匿名JButton,然后添加另一个(内部)匿名ActionListener来处理事件并根据需要更新按钮的文本。 有更好的解决方案吗? 我很确定我不能声明一个匿名的JButton implements […]