如何在匿名类中避免大量代码?

时间:2017-12-15 23:26:05

标签: java

我继承了一堆Java代码。我已经在C#中编程了一段时间,然后用C ++编程。有一个Java问题让我头疼;如何在匿名类中移出代码?

代码如下所示:

m_formsListView.setOnItemClickListener( new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int iPosition, long iId) {
// AT LEAST 200 LINES OF CODE IN HERE!
    }
} );

包含函数中的200行代码对我的编码风格来说是错误的。保存它的函数有很多代码,没有一个是处理点击,所以这个代码是一个分心。我想简单地传递一个函数引用,但我正在使用的Java版本似乎并不支持。我也无法调用外部成员函数。

这真的是Java的设计方式,因此我无法更好地模块化代码,因此函数不包含多个特定操作的代码吗?我想至少让我的功能更小,以便更易于维护。

如何将代码移出匿名类并进入当前方法或函数之外的某些函数或方法?

[编辑]

由于所有有用的反馈和潜在的答案,我提出了解决方案:

让包含所有这些代码的类实现AdapterView.OnItemClickListener接口,只需将OnItemClick代码移出此处并移入外部类。然后我就通过&#34;这个&#34;指向setOnItemClickListener方法的指针。

这里是最终的代码,包括包含所有这些的类的类定义:

public class MainActivity extends AppCompatActivity implements FormInitListener, AdapterView.OnItemClickListener {

    public void onItemClick(AdapterView<?> parent, View view, int iPosition, long iId) {
        ...
    }

    private void SomeMethod()
    {
        ...
        m_formsListView.setOnItemClickListener( this );
        ...
    }
}

接口是我用过的任何一种语言都没有用过的少数几种语言特性之一。而且我最初认为它是某种lambda表达式。

1 个答案:

答案 0 :(得分:2)

匿名内部类对于像事件处理程序这样的简短实现非常有用,但它们不必以这种方式使用。

定义一个实现OnItemClickListener接口的新类,然后将其实例传递给setOnItemClickListener(...)