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() {}
}
我有以下 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() {}
}