【问题标题】:How do I write generic Java method and compare two variables of the generic type inside the method?如何编写泛型 Java 方法并在方法内比较泛型类型的两个变量?
【发布时间】:2015-06-01 09:08:48
【问题描述】:

我写了以下代码:

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] &gt; max)

我知道在未知/任意类的情况下,Java 无法理解 &gt; 运算符。

同时,我不想为我知道我将要发送的类的对象编写不同的方法。

有解决办法吗?

【问题讨论】:

  • 您最好的选择是强制类型 T 必须是 Comparable。您可以将其更改为&lt;T extends Comparable&lt;? super T&gt;&gt;,然后使用compareTo
  • 或使用Comparator

标签: java arrays generics


【解决方案1】:

您需要将T 更改为T extends Comparable&lt;T&gt; 并使用compareTo 方法。那就是:

  • private static &lt;T extends Comparable&lt;T&gt;&gt; T getMax(T[] array),和
  • if (array[i].compareTo(max) &gt; 0) { ... }

但请注意,您可以使用

maxElement = Collections.max(Arrays.asList(array));

【讨论】:

    【解决方案2】:

    是的,有一个解决方法,通过将Comparable 上限添加到T

    由于&lt; 运算符不适用于对象,因此您必须使用等效功能,即Comparable 接口中的compareTo 方法。

    通过提供上限确保T 类型为Comparable

    private static <T extends Comparable<T>> T getMax(T[] array)
    

    然后,代替&gt; 运算符,调用compareTo

    if(array[i].compareTo(max) > 0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多