【问题标题】:The method countGreaterThan(T[], T) in the type GenericMethodsAndBoundedTypeParameters is not applicable for the arguments (Integer[], Integer)GenericMethodsAndBoundedTypeParameters 类型中的方法 countGreaterThan(T[], T) 不适用于参数 (Integer[], Integer)
【发布时间】:2021-11-06 17:43:29
【问题描述】:

更新:

我在从 Oracle Java 教程学习 Java 泛型时出现了这个问题,代码来自 https://docs.oracle.com/javase/tutorial/java/generics/boundedTypeParams.html,这导致我出现以下错误。我当时并不知道 Java 已经有了 Comparable 接口。在我删除自己的 Comparable 接口后问题就解决了。

原帖:

我无法修复以下代码中的错误。我在 Eclipse 2021-09 上使用 JavaSE-16

public class GenericMethodsAndBoundedTypeParameters {
    public static void main(String[] args) {
        int a = countGreaterThan(new Integer[] {1, 2, 3, 4, 5}, (Integer)(2));
    }
    public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) {
        int count = 0;
        for(T e : anArray) {
            if(e.compareTo(elem) > 0) {
                ++count;
            }
        }
        return count;
    }
}

interface Comparable<T> {
    public int compareTo(T obj);
}

错误信息如下所示:

GenericMethodsAndBoundedTypeParameters 类型中的方法countGreaterThan(T[], T) 不适用于参数(Integer[], Integer)

【问题讨论】:

  • 您似乎已经声明了自己的Comparable&lt;T&gt; 接口。 不要

标签: java generics


【解决方案1】:

不要定义自己的Comparable 接口。另外,你想要? super T。喜欢,

public static <T extends java.lang.Comparable<? super T>> int countGreaterThan(
            T[] anArray, T elem) {
    int count = 0;
    for (T e : anArray) {
        if (e.compareTo(elem) > 0) {
            ++count;
        }
    }
    return count;
}

为我工作。当我在提供的main 中添加System.out.println(a); 时,我得到3

【讨论】:

  • 嗨,Elliott,您的解决方案有效。删除自己的 Comparable 接口后,错误消息立即消失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 2013-03-20
相关资源
最近更新 更多