如何编写泛型 Java 方法并比较方法内泛型类型的两个变量?
How do I write generic Java method and compare two variables of the generic type inside the method?
我写了下面的代码:
private static <T> T getMax(T[] array) {
if(array.length == 0) {
return null;
}
T max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max)
max = array[i];
}
return max;
}
问题出在这一行:if(array[i] > max)
。
我了解 Java 无法理解 unknown/arbitrary 类 中的 >
运算符。
同时,我不想为我知道要发送的 类 的对象编写不同的方法。
有解决办法吗?
您需要将T
更改为T extends Comparable<T>
并使用compareTo
方法。即:
private static <T extends Comparable<T>> T getMax(T[] array)
,以及
if (array[i].compareTo(max) > 0) { ... }
但请注意,您可以使用
maxElement = Collections.max(Arrays.asList(array));
是的,有一个解决方法,即在 T
上添加 Comparable
上限。
因为 <
运算符不适用于对象,您必须使用等效功能,即 Comparable
接口中的 compareTo
方法。
通过提供上限确保类型 T
是 Comparable
。
private static <T extends Comparable<T>> T getMax(T[] array)
然后,代替 >
运算符,调用 compareTo
:
if(array[i].compareTo(max) > 0)
我写了下面的代码:
private static <T> T getMax(T[] array) {
if(array.length == 0) {
return null;
}
T max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max)
max = array[i];
}
return max;
}
问题出在这一行:if(array[i] > max)
。
我了解 Java 无法理解 unknown/arbitrary 类 中的 >
运算符。
同时,我不想为我知道要发送的 类 的对象编写不同的方法。
有解决办法吗?
您需要将T
更改为T extends Comparable<T>
并使用compareTo
方法。即:
private static <T extends Comparable<T>> T getMax(T[] array)
,以及if (array[i].compareTo(max) > 0) { ... }
但请注意,您可以使用
maxElement = Collections.max(Arrays.asList(array));
是的,有一个解决方法,即在 T
上添加 Comparable
上限。
因为 <
运算符不适用于对象,您必须使用等效功能,即 Comparable
接口中的 compareTo
方法。
通过提供上限确保类型 T
是 Comparable
。
private static <T extends Comparable<T>> T getMax(T[] array)
然后,代替 >
运算符,调用 compareTo
:
if(array[i].compareTo(max) > 0)