我想在我的java代码中创建一个匿名内部类

时间:2014-04-01 13:24:16

标签: java

这是我的代码:

package com.chapter9.innerclass;

public class AnonymousInnerClass {

    private int i = 10;

    private void f(){
        System.out.println("AnonymousInnerClass f()");
    }

    public void h(){
        new Object{
            void g(){
                i++;
                f();
            }
        }.g();
        System.out.println("i = "+i);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        AnonymousInnerClass aic = new AnonymousInnerClass();
        aic.h();
    }

}

如您所见,我在h()函数中声明了一个新的匿名Object类。 在main()中,我尝试使用h()使g()函数工作。但是当我编写代码时,它给出了以下消息:

线程中的异常" main" java.lang.Error:未解决的编译问题:     令牌上的语法错误" new",预期接口     令牌上的语法错误"。",删除此令牌     对于AnonymousInnerClass类型

,方法g()未定义

我该怎么办?请告诉我使用AnonymousInnerClass的确切方法。

3 个答案:

答案 0 :(得分:5)

new Object{

应该是:

new Object(){

答案 1 :(得分:3)

虽然在你的情况下你只是有一个拼写错误,但一般来说编译器不会知道方法g()存在,即,如果你试图在其他地方调用g()它将会失败。

通常匿名内部类实现接口:

interface X {
  void doSomething();
}

// somewhere else:
X x = new X(){
  void doSomething(){
    // implementation
  }
}
// this call now works.
x.doSomething();

请注意,在Java 8中,根据this article使用Lambda表达式和功能接口实现只有一个方法的接口更加容易。

答案 2 :(得分:1)

另请注意,只要将Object分配给Object类型的任何引用变量,您就无法从外部访问g()