java语法问题

时间:2010-07-20 20:17:20

标签: java android

此代码是否实例化了一个SectionedAdapter对象并在一行中覆盖了getHeaderView?

SectionedAdapter tagSectionedAdapter=new SectionedAdapter() {
    protected View getHeaderView(String caption, int index,
                                    View convertView,
                                    ViewGroup parent) {
        TextView result=(TextView)convertView;

        if (convertView==null) {
            result=(TextView)getLayoutInflater()
            .inflate(R.layout.tag_listview_header, null);
        }

        result.setText(caption);

        return(result);
    }
};

2 个答案:

答案 0 :(得分:3)

是的,你是对的。这称为anonymous inner class。该类已定义但从未给出名称。 (SectionedAdapter实际上是匿名类的超类型。)

答案 1 :(得分:2)

它声明了一个类并重写了一个方法。

它类似于声明这样的类:

class MySectionedAdapter extends SectionedAdapter
{
   @Override
   protected View getHeaderView(...)
   {
      ...
   }
}

然后实例化该类:

SectionedAdapter tagSectionedAdapter = new MySectionedAdapter();

这是一个匿名的内部类 - 没有名称和略有不同的语法。在某些情况下只需要一个类的特定实例时使用它。例如,比较器类通常以这种方式实现并传递给排序函数。

您实现的类实际上可以是一个接口,而不是一个类,就像Runnable一样。