我正在尝试编写匿名内部类
interface Face{
void seeThis(String what);
}
class Eyes {
public void show(Face f){}
}
public class Seen {
public void test() {
Eyes e = new Eyes();
e.show(new Face() {
@Override
public void seeThis(String what){
System.out.print(what);
}
});
public static void main(String[] args) {
Seen s = new Seen();
s.test();
}
}
如何调用seeThis()以及如何将参数传递给它?
答案 0 :(得分:2)
方法seeThis()
属于Face
类,该实例是匿名的,因此如果不存储对它的引用就无法访问它。如果要存储引用,可以通过以下方式执行此操作:
public class Seen {
public Face face;
....
this.face = new Face() { ... };
e.show(this.face);
然后,
Seen s = new Seen();
s.face.seeThis();
现在,关于传递参数。你有两个选择 - 在匿名类之外声明参数并使它成为final
以便这个匿名类可以访问,或者用正常类替换匿名类并将参数传递给它的构造函数:
方法一:
final int parameter = 5;
...(new Face() {
@Override
public void seeThis() {
System.out.println(parameter);
}
});
方法二:
public class MyFace implements Face() {
private final int parameter;
public MyFace(int parameter) {
this.parameter = parameter;
}
@Override
public void seeThis() {
System.out.println(parameter);
}
}
然后,
...
e.show(new MyFace(10));