这是我的代码:
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的确切方法。
答案 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()