我继承了一堆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 接口(interface),然后将 OnItemClick 代码移出此处并移至外部类中。然后我只需将“this”指针传递给 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 );
...
}
}
接口(interface)是我在编写的任何语言中都没有太多使用的少数语言功能之一。我最初认为这是某种 lambda 表达式,当然搞砸了。
最佳答案
匿名内部类对于像事件处理程序这样的短实现很有用,但它们不必以这种方式使用。
定义一个实现 OnItemClickListener
接口(interface)的新类,然后将其实例传递给 setOnItemClickListener(...)
。
关于java - 如何避免匿名类中出现大量代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47841096/