Java 未绑定通配符泛型

发布于 2025-01-03 03:42:58 字数 214 浏览 0 评论 0原文

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

public class Foo<T> {}

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

Are there any advantages of using wildcard-type generics in the Bar class over completely skipping them?

public class Foo<T> {}

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

帅气称霸 2025-01-10 03:42:58

有多种优点。

  • 它们不会像使用原始类型那样产生编译器警告
  • 它们提供了更多的类型安全性。例如,考虑 Foo 是否为 List。如果您使用 List 而不是 List,您可以这样做:

    myBar.getFoo("数字").add("某个字符串");
    

    即使列表仅应该包含数字。如果您返回一个 List,那么您将无法向其中添加任何内容null 除外),因为列表未知。

  • 它们记录了与原始类型完全不同的内容,即 Foo 是在某些未知但特定的类型上键入的。

There are multiple advantages.

  • They won't produce compiler warnings like using the raw type would
  • They give more type safety. For example, consider if Foo was List instead. If you used List instead of List<?>, you could do this:

    myBar.getFoo("numbers").add("some string");
    

    even if the list was only supposed to contain Numbers. If you returned a List<?>, then you would not be able to add anything to it (except null) since the type of list is not known.

  • They document something completely different than a raw type, namely that Foo is typed on some unknown but specific type.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文