Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java泛型类型参数?_Java_Generics - Fatal编程技术网

如何使用java泛型类型参数?

如何使用java泛型类型参数?,java,generics,Java,Generics,两者之间有什么区别 public static <T> double sums(Collection<T extends Number> numbers) {} 公共静态双和(集合号){ 还有这个 public static <T extends Number> double sums(Collection<T> numbers) {} public static double sums(Collection<? extends Nu

两者之间有什么区别

public static <T> double sums(Collection<T extends Number> numbers) {} 
公共静态双和(集合号){
还有这个

public static <T extends Number> double sums(Collection<T> numbers) {}
public static double sums(Collection<? extends Number> numbers) {}
公共静态双和(集合号){
还有这个

public static <T extends Number> double sums(Collection<T> numbers) {}
public static double sums(Collection<? extends Number> numbers) {}

publicstaticdoublesum(Collection让我们把它们一一分解

  • 这是胡说八道。不要这样做。它不会编译是有原因的

  • 在这里,我们定义了一个通用函数
    sums
    。我们的函数可以用一个包含某些特定数值类型元素的集合来调用

  • 这与(2)类似。更多信息如下

  • 这是(3)的一个奇怪版本。也不要这样做;您只是声明了一个类型参数而没有使用它,所以这没有什么意义

  • 现在,(2)和(3)非常相似。当我们使用
    作为类型参数时,我们本质上是说“这可以是任何东西,但我并不特别关心它的值是什么”。另一方面,当我们显式使用
    t
    时,我们可以使用该类型参数做其他事情。它是一个类型级别变量

    public static <T extends Number> double sums(Collection<T> numbers) {
      for (T arg : numbers) {
        // Do something with arg
      }
    }
    

    我们知道
    numbers
    包含某些特定类型的数字,但我们不知道它是什么,因此我们必须回到更一般但仍然安全的
    numbers

    最后一个变量根本不使用
    t
    。?您的第一个变量没有编译。这将很有帮助:请尝试从问问题之前,谷歌,快乐编码!!可能重复而不是说无意义的代码你可以说为什么它是无意义的。还有它不会编译的原因。对于3和4,你不能向集合中添加任何东西,因为元素的类型是特定的,但未知。这个问题与PECS无关。我只是问关于类型参数和通配符的语法用法。@mcempire:“使用3和4,您无法向集合中添加任何内容”您可以将其传递给另一个具有签名#2的方法,该方法可以向集合中添加内容(尽管它只能将集合中的元素添加到自身,因为它不知道
    t
    是什么),所以它可以间接地做任何事情#2可以做的事情。@newacct当然,这样做是可能的。人们也可以简单地键入它。