首页 > 解决方案 > 如何避免 Java 中的这种擦除错误?

问题描述

我有一个类似于Set interface方法的自制存储对象。我想让它兼容,Set以便它可以与Collections 兼容。问题是它是一个泛型类,而泛型类使用类型变量作为方法参数。

我说的两种方法:

我有:

remove(T var) {/*remove var*/}

Set interface有这个:

remove(Object var) {/*remove var*/}

编译器告诉我有某种擦除错误。我可以removeremove(T var)它是什么改变为删除(Object var),但我不喜欢这样做。

Set是否有另一种方法可以在不更改我原始方法签名的情况下使其兼容?

标签: javagenericscollectionserasure

解决方案


(Object v)它被声明为而不是声明的原因是因为它删除了(T v)所有. 请注意,不同类的对象可以相互比较,它们相等是完全合法的,因为不要求对象属于同一类。xv.equals(x) == trueequals


推荐阅读