java - 使用带通配符的泛型不允许使用以泛型作为参数的方法

标签 java generics wildcard compiler-errors

如果我将泛型类声明为类似

public class Driver<V extends Car>

其中 Car 是一个接口(interface)。

然后,我将它与这样的东西一起使用:

Driver<?> driver = new Driver<Chevrolet>();

我不想将 car 的特定实现指定为通用。

为什么我无法调用在使用泛型类作为参数的驱动程序中实现的方法?

例如,如果 Driver 有一个类似的方法

public void drive(V vehicle)

它不允许我用我的驱动程序实例调用它(Driver<?>)。

最佳答案

因为编译器不知道 driver.drive(? vehicle) 会接受什么类型的参数。应该选择雪佛兰、本田还是其他车型?

有关更多详细信息,您可能会找到 Gilad Bracha's Generics Tutorial有帮助。

您的 drive() 方法的目的是什么。 vehicle 参数是否需要键入 Car 的特定子类型?简单地接受 Car 是否更合适?


以下是我原回答的一部分,经过评论的讨论证明是不正确的。我把它留在这里,这样评论就不会孤立。

尝试像这样声明你的方法:

public <T extends V> void drive(T vehicle)

看看这是否更适合您。

关于java - 使用带通配符的泛型不允许使用以泛型作为参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3228649/

相关文章:

elasticsearch - 使用 OR 和通配符查询 elasticsearch

search - 我可以在 github.com 上进行通配符 (*) 搜索吗?

java - 列出所有可以在java中打开特定文件类型的已安装程序

java - 在声明后为 Java 中的常量设置值

java - 如何在 OpenXava 中创建复选框?

java - 从 Eclipse 中的多个包导出多个 JAR

c# - 如何使用泛型比较 C# 中的 X 列表和 Y 列表?

java - 未经检查的类型转换和泛型类

generics - 作为使用关联类型的特征的结构成员

python - 获取目录中文件的过滤列表