泛型类型:不适用于参数

时间:2018-04-20 14:22:30

标签: java generics

编码时出现此错误。任何人都可以向我解释为什么它不适用以及如何解决它。非常感谢提前!

  

错误:SearchTools12类型中的方法linSearch(T [],T)不是   适用于参数(int [],int)

import java.util.NoSuchElementException;
public class SearchTools12 {
public static int[] createSequence(int n){
    int[] a= new int[n];
    for (int i=0; i<a.length; i++){
        a[i]=i+1;
    }
    return a;
}
public static <T> int linSearch (T[] a, T x){ 
    int i = 0; 
    while (i < a.length){
        if (x == a[i]) return i;
        i += 1;
    } 
    throw new NoSuchElementException();
}

public static void main(String[] args){
    int n=30;
    int x=15;
    System.out.println(linSearch(createSequence(n), x));

}
}

2 个答案:

答案 0 :(得分:4)

原因是int是一种原始类型,它在java中具有特定的角色,因此您无法将int[]强制转换为T[]。您可以使用Integer[]而不是使用基元类型,它应该可以正常工作。因此,您应该将createSequence方法更改为

public static Integer[] createSequence(int n) {
    Integer[] a = new Integer[n];
    for (int i = 0; i < a.length; i++) {
        a[i] = i + 1;
    }
    return a;
}

答案 1 :(得分:0)

linSearch (T[] a, T x)需要一个T数组,但您尝试传递int数组。数组int[]的类型与数组T[]的类型不同。

要做到这一点,可以尝试改变:

linSearch (T x, T... a) // vararg of generic T

然后致电:

linSearch(x, createSequence(n))  // passing int[] to T...