我正在创建ListView的子类,该子类需要一个专门的适配器来将ListAdapter(CustomAdapter)子类化。我想保留setAdapter和getAdapter方法,因为它们是程序员希望与AdapterView一起使用的标准方法。
我可以覆盖吸气剂:
@Override
public CustomAdapter getAdapter() {...}
因为它仍然返回ListAdapter。但是,我不能覆盖设置器:
@Override
public void setAdapter(CustomAdapter adapter) {...}
我明白了为什么Java不允许我这样做。因此,为了解决它,现在,我这样做:
@Override
public void setAdapter(ListAdapter adapter) {
throw new UnsupportedOperationException("adapter must be an instance of CustomAdapter");
}
public void setAdapter(CustomAdapter adapter) {
this.adapter = adapter;
}
我认为这没什么大不了的,但是这让我很烦。仍然暴露原始的ListAdapter设置器似乎不太好(尤其是因为它显示在自动完成列表中)。有什么方法可以抑制原始的二传手,或者上述块是执行此操作的正确方法?
谢谢,
最佳答案
为什么不
@Override
public void setAdapter(ListAdapter adapter) {
if (adapter instanceof CustomAdapter) {
this.adapter = (CustomAdapter adapter)
} else {
throw new IllegalArgumentException("adapter must be an instance of CustomAdapter");
}
}