gpt4 book ai didi

java - 有人可以解释这些 java 泛型方法的声明吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:19:08 25 4
gpt4 key购买 nike

我正在阅读 Gilad Bracha 的“Java 编程语言中的泛型”,我对声明的风格感到困惑。在第 8 页找到以下代码:

interface Collection<E> 
{
public boolean containsAll(Collection<?> c);
public boolean addAll(Collection<? extends E> c);
}


interface Collection<E>
{
public <T> boolean containsAll(Collection<T> c);
public <T extends E> boolean addAll(Collection<T> c);
// hey, type variables can have bounds too!
}

我的困惑点来自第二个声明。我不清楚 <T> 的目的是什么声明服务于以下行:

    public <T> boolean containsAll(Collection<T> c);

该方法已经有一个与之关联的类型( boolean 值)。

为什么要使用 <T>它告诉编译器什么?

我认为我的问题需要更具体一些。

为什么要写:

  public <T> boolean containsAll(Collection<T> c);

对比

  public boolean containsAll(Collection<T> c);

我不清楚 <T> 的目的是什么是,在 containsAll 的第一个声明中。

最佳答案

据我所知,在这种情况下 <T>根本不提供任何有用的东西。它创建了一个在功能上完全等同于使用通配符的方法。

下面是一些有用的例子:

public List<?> transform(List<?> in);
//vs
public <T> List<T> transform(List<T> in);

在上面,您可以将返回类型与输入类型相关联。第一个示例无法关联两个通配符的运行时类型。

public void add(List<?> list, Object obj);
//vs
public <T> void add(List<? super T> list, T obj);

在上面,第一种方法甚至不能添加obj。至 list因为它不能被认为是类型安全的。第二个中的通用参数确保 list可以容纳任何类型 obj是。

关于java - 有人可以解释这些 java 泛型方法的声明吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4692504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com