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

Java未绑定通配符泛型

饶德元
2023-03-14
问题内容

Bar与完全跳过它们相比,在类中使用通配符类型的泛型有什么优势吗?

public class Foo<T> {}

public interface Bar {
    public void addFoo(Foo<?> foo);
    public Foo<?> getFoo(String name);
}

问题答案:

有很多优点。

  • 他们不会像使用原始类型那样产生编译器警告
  • 它们提供了更多的类型安全性。例如,考虑是否FooList。如果您使用List代替List<?>,则可以执行以下操作:
    myBar.getFoo("numbers").add("some string");
    

即使该列表仅 包含Numbers。如果返回List<?>,则您将无法添加 任何 内容(除外null),因为列表类型未知。

  • 他们记录的东西与原始类型完全不同,即Foo使用某种 未知但特定的类型进行输入


 类似资料:
  • 这个问题的答案表明,当方法采用通配符泛型类型时,可以访问或修改集合,但不能同时访问或修改集合。(凯西和伯特) 据我所知,方法do1有,因此d2只能被访问,不能被修改。方法d2具有,因此可以访问和修改c2,并且没有编译错误。 通用指南

  • 我很困惑,如果下面的方法是相同的?有什么细微的区别吗? 非常感谢你的建议。 方法1 方法二

  • 问题内容: 我不明白未绑定通配符泛型的用途。具有上限的绑定通配符泛型非常有意义,因为使用多态性,我可以使用该类型或集合。但是拥有可以是任何类型的泛型有什么意义呢?它是否违背了泛型的目的?编译器没有发现任何冲突,并且在类型擦除之后,就好像没有使用任何泛型一样。 问题答案: 当您的方法实际上并不关心实际类型时,未绑定类型可能很有用。 一个原始的例子是这样的: 由于可以处理所有引用类型(通过调用),因此

  • 问题内容: 我对Java中的通用通配符有两个疑问: 和之间有什么区别? 什么是有界通配符,什么是无界通配符? 问题答案: 在你的第一个问题中,并且是有界通配符的示例。无限制的通配符看起来像,基本上就是<? extends Object>。宽松地表示泛型可以是任何类型。有界通配符(或)通过说它必须扩展特定类型(称为上限)或必须是特定类型的祖先(称为下限)来对类型进行限制。

  • 所以我在阅读泛型以重新熟悉这些概念,尤其是在涉及通配符的地方,因为我很少使用或遇到通配符。从我的阅读中,我不明白他们为什么使用通配符。下面是我经常遇到的一个例子。 你为什么不这样写: oracle网站上的另一个示例: 为什么这不是写成 我错过什么了吗?

  • 下面是一个通用搜索算法的实现: 接口: (方括号=弧形括号) 问题出在哪里?我想不通...对泛型参数T也进行了扩展。