我正在创建 ListView 的子类,它需要一个专门的适配器,它是 ListAdapter ( CustomAdapter )的子类。我想保留 setAdapter 和 getAdapter 方法,因为它们是程序员希望与 AdapterView 一起使用的标准方法。
我可以覆盖getter:
@Override
public CustomAdapter getAdapter() {...}
因为它仍然返回一个ListAdapter。但是,我无法覆盖setter:
@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设置器似乎是不优雅的(特别是因为它显示在自动完成列表中)。有没有办法压制原始的setter,或者上述块是否正确的方法呢?
谢谢,
答案 0 :(得分:2)
为什么不
@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");
}
}