我有以下类层次结构:
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);
}
...
}
我发现这有点难看。我宁愿在bindView()
中没有ASubActivity
方法。有最佳实践方法吗?
注意: BaseActity
确实包含两个子类使用的其他一些抽象方法。
答案 0 :(得分:3)
这是一个比android特有的更普遍的java问题。必须实现所有抽象方法,这会使代码变得混乱。
唯一的替代方法是在父类中实现// do nothing
版本(在您的情况下为BaseActivity
)。你不必将它抽象化,因为它在抽象类中什么都不做。
public abstract class BaseActivity extends AppCompatActivity {
protected void bindView() {}
}
ASubActivity:
public class ASubActivity extends BaseActivity {
// Nothing to see here.
}
答案 1 :(得分:2)
一种方法是将bindView()
放入接口而不是BaseActivity
,并且只有BSubActivity
实现该接口:
public interface BindViewInterface{
protected void bindView();
}
然后就不需要bindView()
BSubActivity
。
另一种方法是不要使bindView()
成为抽象方法:
public abstract class BaseActivity extends AppCompatActivity {
protected void bindView() {}
}
答案 2 :(得分:1)
根据您的用例,您可以使bindView() - 方法不是抽象的:
public abstract class BaseActivity extends AppCompatActivity {
protected void bindView() {
}
}
在这种情况下,您不必覆盖ASubActivity
中的方法。但您可以在BSubActivity
。