我正在创建 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 似乎不太优雅(特别是因为它显示在自动完成列表中)。有什么方法可以抑制原始 setter ,或者上面的 block 是执行此操作的正确方法吗?
谢谢
最佳答案
为什么不
@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");
}
}
关于java - 具有自定义适配器的ListView子类: basic Java Q,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640066/