我正在创建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");
    }
}

08-04 14:13