将参数传递给Java中的匿名类

时间:2014-04-28 01:41:38

标签: java parameter-passing anonymous-class

我正在尝试编写匿名内部类

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()以及如何将参数传递给它?

1 个答案:

答案 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));