如果我将泛型类声明为类似
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/