Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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 理解:公共静态<;T>;int max(列表、比较器、超级T>;c)_Java_Generic Method - Fatal编程技术网

Java 理解:公共静态<;T>;int max(列表、比较器、超级T>;c)

Java 理解:公共静态<;T>;int max(列表、比较器、超级T>;c),java,generic-method,Java,Generic Method,我应该做一个方法,返回任何列表的最大值,我想这是一个通用的方法。但是我不明白参数,有人能解释一下吗? 我还制作了一个迭代器,我将在解决方案中使用它来运行列表,但是当我制作迭代器的实例时,这个方法会给我以下错误:“#nameofclass不能从静态上下文引用”,那么我如何在这里创建实例?(由于某种原因,它应该是静态的)我将感谢任何帮助 public static <T> int maks(List<T> list, Comparator<? super T> c

我应该做一个方法,返回任何列表的最大值,我想这是一个通用的方法。但是我不明白参数,有人能解释一下吗? 我还制作了一个迭代器,我将在解决方案中使用它来运行列表,但是当我制作迭代器的实例时,这个方法会给我以下错误:“#nameofclass不能从静态上下文引用”,那么我如何在这里创建实例?(由于某种原因,它应该是静态的)我将感谢任何帮助

public static <T> int maks(List<T> list, Comparator<? super T> c)
  {
    // return max in a list
  }

publicstaticintmaks(List-List,Comparator您有List-List和Comparator c,为什么不:

Collections.max(list, c);
-它将返回列表或任何其他集合中的max元素


虽然我不明白在泛型列表中查找最大值时为什么要返回int-也许您正在查找它的“索引”

下面是一个非常典型的泛型方法声明:

public static <T> int max(List<T> list, Comparator<? super T> c) {
  :
  :
}
通过原始类型声明,可以很容易地看到该方法向int类型的调用方返回一个值。该方法接受两个参数:列表实例和比较器实例

原始类型声明的问题在于它不安全。为什么?因为
List
Comparator
都是使用正式泛型类型参数定义的泛型类。如果使用泛型类,但不指定其参数(如上面的声明中所示)您将失去泛型为您提供的所有类型安全性和表达能力

通用方法的特点是采用以下方法:

public <T> MyType myMethodName( /* parameters */) { ... }
公共MyType myMethodName(/*参数*/){…}
请注意,泛型方法在方法声明中使用其类型参数进行声明,并且类型参数紧跟在返回类型之前。这是标准的

在这种情况下,
表示方法的无界类型参数。无论方法中出现什么T,传递给方法的实际类型参数都将取代T。使方法参数依赖于T是常见的,但不是必需的(但是T可以出现在方法体中类型声明可以出现的任何地方——类型擦除需要一些例外情况)

在您的示例中,参数列表是

(List<T> list, Comparator<? super T> c)

(List List,Comparator该声明的哪一部分您不理解?
之前,返回类型
int
是一个类型参数声明。使用这些关键字做一些研究。我不理解参数,首先是一个通用列表,我很好,但是接下来呢?第二个参数必须是一个可以对类型T或T的超类。这样的比较器将能够相互比较Ts,这就是您想要的。
(List<T> list, Comparator<? super T> c)