【问题标题】:java : how to compare generic variables with intjava:如何将泛型变量与 int 进行比较
【发布时间】:2020-11-30 17:00:04
【问题描述】:

编写一个 Java 程序来定义一个泛型方法,该方法计算数组 T [ ] 中大于指定元素 elem 的元素数。

我的代码写成:

public class GenericMethods<E extends Comparable<E>> {
    
    public static < E > void printArray( E[] inputArray ) {
        // Display array elements
        for(E element : inputArray) {
            System.out.printf("%s ", element);
        }
        System.out.println();
    }
    public static < E > void countArray( E[] inputArray, int elem) {
        int i=0;
        for(E element : inputArray){
            if(elem>element)
                i++;
        }
        System.out.println(i);
    }


   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      Integer[] intArray = { 1, 2, 3, 4, 5 };
      System.out.println("\nArray contains:");
      printArray(intArray);
      int elem=0;
      System.out.println("Enter the specified number: ");
      elem = sc.nextInt();
      countArray(intArray, elem); 
      
   }
}

我收到以下错误:

error: bad operand types for binary operator '>' if(elem>element) ^ first type: int second type: E where E is a type-variable: E extends Object declared in method countArray(E[],int) 1 error

【问题讨论】:

  • 你实际上应该使用GenericMethods&lt;E extends Number&gt;

标签: java


【解决方案1】:

一种方法是要求您的泛型类型参数ENumber

然后可以使用NumberintValue()方法将数组的每个元素转换为int,可以和elem比较。

public static <E extends Number> void countArray(E[] inputArray, int elem) {
    int i = 0;
    for (E element : inputArray) {
        if(elem > element.intValue ())
            i++;
    }
    System.out.println(i);
}

【讨论】:

    【解决方案2】:

    你不能在对象上使用&gt; 运算符
    你可以按照 Eran 说的做或确保 E 实现 Comparable 并使用compareTo()

    <E extends Comparable>
    if(element.compareTo(new Integer(elem))<0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2013-04-05
      • 2020-10-20
      • 2020-11-15
      相关资源
      最近更新 更多