【问题标题】:Differences between Wildcard and generic methods? [Java] [duplicate]通配符和泛型方法的区别? [Java] [重复]
【发布时间】:2020-11-02 22:00:43
【问题描述】:

我不明白这两种模式之间的区别。通配符可以只扩展我的类而不能扩展泛型方法吗?但我认为这不是答案。

【问题讨论】:

标签: java generics wildcard extends


【解决方案1】:

Java 中的通配符表示未知类型,它们可以用作返回类型。引用 Oracle Java 教程中给出的解释:

通配符可用于多种情况:作为参数、字段或局部变量的类型;有时作为返回类型(尽管更具体的是更好的编程实践)。通配符永远不会用作泛型方法调用、泛型类实例创建或超类型的类型参数。 See this

假设您有一个List<String>,并且您会尝试将它传递给接受List<Object> 的方法,它不会编译(Java 试图保护您不在这里创建运行时异常)。但是,如果你将它传递给一个接受List<?> 的方法,它会。这可能会让您对通配符的用处有所了解。

关键字extends 用于具有上限的通配符,例如List<? extends Object>。还有下界的通配符:List<? super String>

如果没有通配符,泛型的整个主题就会变得不那么有趣,因为泛型被视为对象(类型擦除)。这意味着可供他们使用的方法并不多。通配符通过限制类型来解决这个问题(因此指定了一个通用接口,其中包括一组可以在对象上调用的通用方法)。

【讨论】:

    猜你喜欢
    • 2018-02-20
    • 2012-06-12
    • 2022-08-14
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多