当前位置: 首页 > 面试题库 >

Java泛型名称clash,具有相同的擦除

闽经纬
2023-03-14
问题内容

我有超一流的Foo。还有一个扩展它的类Bar。

public class Bar extends Foo

在Foo中的功能:

protected void saveAll(Collection<?> many)

酒吧功能:

public void saveAll(Collection<MyClass> stuff) {
   super.saveAll(stuff);
}

出现错误:

 Name clash: The method saveAll(Collection<MyClass>) of type Bar has the same erasure as saveAll(Collection<?>) of type Foo but does not override it.

我究竟做错了什么?


问题答案:

您正在saveAll使用不兼容的类型覆盖该方法。也许您想做类似的事情:

public class Bar extends Foo<MyClass>

功能在 Foo<E>

protected void saveAll(Collection<E> many)

和功能在酒吧:

public void saveAll(Collection<MyClass> stuff) {
   super.saveAll(stuff);
}


 类似资料:
  • 问题内容: 我收到此名称冲突错误,我不知道该怎么解决。我有两个类,我正在使用重载的方法“ createSensors”。为了简化,这里是产生问题的代码: 问题答案: 通用解决方案是使用不同的名称。这些方法可以在没有继承关系的类中,因为它们不是实例方法。 如所指出的,问题中的方法实现是相同的(典型值除外)。 (此重载问题经常与擦除运行时类型混淆。重载是链接时而非动态问题,因此可以在语言中轻松解决。这

  • 问题内容: 以下代码可以正常工作。在两个不同的结构上操作并打印该结构的字段的两种方法: 在控制台中显示所需的输出: 现在 ,如果我以以下方式更改方法签名,则会出现编译错误。我只是将方法的接收者移动到方法的参数: 我什至无法编译程序: 问 :为什么 当 方法具有相同的名称和Arity 时 ,我可以在接收器中互换结构类型,而不能在参数中互换结构类型? 问题答案: 因为Go不支持在其参数类型上重载用户定

  • 问题内容: 我是Swift的新手,我已经遍历了一些教程,其中许多教程使用同一个名称多次定义了一个函数。 我已经习惯了其他编程语言,否则将无法执行此操作。 因此,我检查了官方的Swift手册,还检查了override关键字,以了解可以得到的结果,但是仍然无法理解以下代码: 从我看到的函数tableView设置在第1行和第5行,我注意到的唯一区别是第一个tableView函数返回,而第二个函数返回(U

  • 在JLS 8第8.4.8.1节中,有一条声明: 在某些参数化下,泛型超类C中的具体方法可以与该类中的抽象方法具有相同的签名。在这种情况下,具体方法是继承的,而抽象方法不是。然后应将继承的方法视为覆盖其来自C的抽象对等体。 有人能为泛型类提供这种参数化的例子吗?我不能。

  • API调用 API响应equation_list字段包含整数数组或字符串。例如: 但我有个例外 com.google.gson.java.lang.IllegalStateException:预期BEGIN_ARRAY但在第1行第1586列路径$[5]处是STRING。equation_list 我如何满足我的要求?

  • 假设您有2个包,并且有名为-Test的公共类。 第一个包。测试 第二包测试 它们中的每一个都有实例变量-x。 在第一种情况下-int x=2; 在第二种情况下-int x=3; 我想导入FirstPackage。在第二个包内测试。测试并打印值为2的x。 我的代码: 但是输出是3。如何打印?