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