Java sub class 中空覆盖方法的替代方法

Java alternative for empty overridden method in sub class

我有以下 class 层次结构:

BaseActivity:

public abstract class BaseActivity extends AppCompatActivity {
   protected abstract void bindView();
}

ASubActivity:

public class ASubActivity extends BaseActivity {
  @Override
  protected void bindView() {
    //No implementation
  }
}

BSubActivity:

public class BSubActivity extends BaseActivity {

  private Toolbar toolbar;

  @Override
  protected void bindView() {
     toolbar = (Toolbar) findViewById(R.id.toolbar);
  }

  ...
}

我觉得这有点难看。我宁愿 ASubActivity 中没有 bindView() 方法。有没有最佳实践方法来做到这一点?

注意: BaseActity 确实包含一些其他的抽象方法,它们都被两个子class 所使用。

根据您的用例,您可以使 bindView() 方法不是抽象的:

public abstract class BaseActivity extends AppCompatActivity {
    protected void bindView() {
    }
}

在这种情况下,您不必重写 ASubActivity 中的方法。但是您可以覆盖 BSubActivity.

中的方法

这是一个比 android 更普遍的 java 问题。必须实现所有抽象方法,这会使代码变得混乱。

唯一的其他选择是在父 class 中实施 // do nothing 版本(在您的情况下为 BaseActivity)。您不必仅仅因为它在抽象中什么都不做就将其抽象化 class.

public abstract class BaseActivity extends AppCompatActivity {
   protected void bindView() {}
}

ASubActivity:

public class ASubActivity extends BaseActivity {
   // Nothing to see here.
}

一种方法是将 bindView() 放在接口而不是 BaseActivity 中,并且只有 BSubActivity 实现该接口:

public interface BindViewInterface{
    protected void bindView();
}

那就不用bindView()BSubActivity.

另一种方法是不使 bindView() 成为抽象方法:

public abstract class BaseActivity extends AppCompatActivity {
    protected void bindView() {}
}