由于相同的擦除而导致名称冲突

Name clash because of same erasure

我有如下界面

public interface IDrawerItem<T, VH extends RecyclerView.ViewHolder> extends IItem<T, VH>, IExpandable<T, IDrawerItem>, ISubItem<IDrawerItem, IDrawerItem> {
    void bindView(VH holder, List payloads);

}

我收到以下错误

Error:(44, 10) error: name clash: bindView(VH#1,List) in IDrawerItem and bindView(VH#2,List) in IItem have the same erasure, yet neither overrides the other where VH#1,VH#2 are type-variables: VH#1 extends ViewHolder declared in interface IDrawerItem VH#2 extends ViewHolder declared in interface IItem

为什么会这样?

简短回答:因为无法更改签名。扩展接口只是向接口添加更多签名。

重写只能在 classes 中完成,不能在接口中完成。您无法更新签名,但可以使用相同的签名对该方法进行不同的实现。

接口仅显示一个签名,该签名必须在 class 实现它时可用。为此,您可以更改(覆盖)subclass 中的实现。方法签名(名称和参数)保持不变,因此它仍然符合接口。在接口中没有要覆盖的实现,因此它仅表明在实现此接口的任何 class 中都有这样的方法,并且它可以从实例化对象中调用。