匿名的内部阶级 - 得到"这个"

时间:2014-10-21 16:11:45

标签: java this anonymous-class anonymous-inner-class

我知道如果我有一个匿名内部类并且我需要外部类实例,我只会使用Outer.this。但是,我在anon类中有一个anon类,我想要后者的实例(外部匿名类)。

示例:

mRestService.getComicLatest(new Callback<Comic>() {

    @Override
    public void success(Comic comic, Response response) {
    }

    @Override
    public void failure(RetrofitError retrofitError) {
        mRetryFrame.findViewById(R.id.retry_button).setOnClickListener(
                new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                mRestService.getComicLatest(WHAT_DO_I_PUT_HERE);
            }
        });
    }
});

在上面的例子中,在WHAT_DO_I_PUT_HERE中,我想要Callback anon类的实例。

显然,我知道我可以在Callback类中创建一个实例变量,该变量包含对“this”的引用并将其用于WHAT_DO_I_PUT_HERE,但我希望可能有更简洁的方式,就像我们调用的方式一样Outer.this for non-anon classes。

2 个答案:

答案 0 :(得分:2)

您可以在外部匿名类中添加对this的引用:

mRestService.getComicLatest(new Callback<Comic>() {

    private final Callback<Comic> outerAnon = this;

    @Override
    public void success(Comic comic, Response response) {
    }

    @Override
    public void failure(RetrofitError retrofitError) {
        mRetryFrame.findViewById(R.id.retry_button).setOnClickListener(
                new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                mRestService.getComicLatest(outerAnon);
            }
        });
    }
});

答案 1 :(得分:0)

你应该能够像开始使用Outer一样进一步链接它。这也应该有效:

Outer.Inner.this

编辑: 在进一步阅读后,我发现我可能误解了你的问题,对不起,如果是这样的话。