有人可以解释这个java代码

时间:2010-05-25 13:49:18

标签: java android

我刚开始使用android而且我的java非常生锈。我记不起曾经见过像这样嵌套在另一个函数中的函数。有人可以向我解释究竟是什么,并解释为什么你会在这样的另一个函数中嵌套函数?

private final Handler handler = new Handler() {
        @Override
        public void handleMessage(final Message msg) {
            Log.v(Constants.LOGTAG, " " + ReviewList.CLASSTAG + " worker thread done, setup ReviewAdapter");
            progressDialog.dismiss();
            if ((reviews == null) || (reviews.size() == 0)) {
                empty.setText("No Data");
            } else {
                reviewAdapter = new ReviewAdapter(ReviewList.this, reviews);
                setListAdapter(reviewAdapter);
            }
        }
    };   

5 个答案:

答案 0 :(得分:27)

  • 这是Anonymous Class。 实际发生的是a Handler的子类正在存在 用重写创建 handleMessage功能。

      

    最优雅的事情之一   匿名类是他们允许的   你要准确定义一次性课程   在哪里需要。此外,   匿名课程简洁明了   减少你的混乱的语法   代码。

  • 你还问过“有人可以 准确地向我解释final 做一个很好的解释can be found here

    对于您的示例,final关键字阻止任何人分配新实例/ null变量“handler”的实例意味着我不能写行handler = null;或{{ 1}}在您的示例代码段之后。

答案 1 :(得分:8)

似乎我写了那个Java代码;)。这是我在Manning书中解锁Android的一个例子 - http://code.google.com/p/unlocking-android/。虽然本书的目的不是详细介绍Java,而是专注于Android,但如果引起混淆,我会道歉。

这里的答案是现场的,这是故意的一个匿名内部类,因为它没有在该上下文之外的任何其他地方使用。

我想补充一点,如果你刚开始使用Android,我会选择一本较新的书。 Mark Murphy的CommonsWare书非常好(http://commonsware.com/Android/)并且他保持最新状态(或者看看解锁Android第二版,我没有参与其中,并且没有阅读它所以不能推荐或不是,但曼宁正在研究它,它可以在他们的网站上尽早访问)。

作者推荐一本非他自己的书可能看起来很奇怪,但事实上现在有一些更好的方法可以在更新的API上做这些事情(以1.0级编写,并在1.5上测试)事后)。不要误解我的意思,那本书在整体概念(生命周期,活动,意图等)方面仍然有很多价值(我感到自豪),但有更好/更容易/更新的方式获得完成了一些具体任务。

例如,看一下AsyncTask(http://android-developers.blogspot.com/2009/05/painless-threading.html),它会为你节省很多处理程序/消息的痛苦。

(我会在这里评论,但我无法弄清楚如何评论而不是“回答”,这可能与没有足够的代表有关?)

答案 2 :(得分:3)

这称为匿名类。这里有一个详细的解释.... (link)

答案 3 :(得分:2)

此代码创建类Handler的实例,同时覆盖Handler的“handleMessage”方法。

答案 4 :(得分:2)

这是一个匿名类,它(a)实现Handler接口或(b)扩展Handler类。