0

如果我扩展 Activity 并在我的基类中实现一个事件处理程序(对不起,如果这不是正确的 OOP 术语),我如何确保我的事件处理程序总是从扩展我的类中运行。

public class MyActivity extends Activity{

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//Stuff that I need to do.
}

}//MyActivity class

public class MainActivity extends MyActivity{


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);
}

}//MainActivity class

目的是 MyActivity 最终将出现在其他用户将使用的代码库中。我的类和扩展我的类的 Activity 实例对 onActivityResult. 我显然不能onActivityResult 最终阻止人们覆盖它。

现在,如果用户忘记添加该超级语句,我的代码将不会运行。有什么方法可以强制扩展 MyActivity 的类的实例在与我在父类中定义的方法重叠的方法中运行 super。

4

2 回答 2

2

如果后来的程序员选择不调用super,那么这是他们的决定,他们将失去从您的类继承的好处。据我所知,没有办法保证super会被调用或以任何方式强迫他们调用它。

于 2012-07-12T15:38:58.790 回答
1

据我所知,您不能强制调用 super 方法。

但是,您可以以这样一种方式开发 MyActivity,以便更容易理解开发人员应该如何使用它。

如果您的父类 MyActivity 永远不会被实例化,您可以将其设为抽象类。

抽象类可以包含可以调用抽象方法的方法。

抽象方法必须在扩展它的类中实现。

所以你可以写类似

public abstract class MyActivity extends Activity{

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   //Stuff that I need to do.
   onMyActivityResult(requestCode, resultCode, data);
}

public abstract void onMyActivityResult(int requestCode, int resultCode, Intent data);

}//MyActivity class

public class MainActivity extends MyActivity{

@Override
public void onMyActivityResult(int requestCode, int resultCode, Intent data) {
}

}//MainActivity class
于 2012-07-12T16:17:56.307 回答