Java 泛型类型:不适用于参数

Java 泛型类型:不适用于参数,java,generics,Java,Generics,我在编码时遇到了这个错误。有谁能向我解释为什么它不适用,以及如何修复它。提前多谢 错误:类型SearchTools12中的方法linSearch(T[],T)不可用 适用于参数(int[],int) import java.util.NoSuchElementException; 公共类搜索工具12{ 公共静态int[]createSequence(int n){ int[]a=新的int[n]; 对于(int i=0;i而言,linSearch(T[]a,T x)需要一个T数组,但您试图传递一

我在编码时遇到了这个错误。有谁能向我解释为什么它不适用,以及如何修复它。提前多谢

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

import java.util.NoSuchElementException;
公共类搜索工具12{
公共静态int[]createSequence(int n){
int[]a=新的int[n];
对于(int i=0;i而言,
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...
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...

这是因为
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;
}
公共静态整数[]createSequence(int n){
整数[]a=新整数[n];
for(int i=0;i
原因是
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;
}
公共静态整数[]createSequence(int n){
整数[]a=新整数[n];
for(int i=0;i
我没有JDK来进行测试,但我认为调用方法的正确语法是linSearch(createSequence(n),x)。您的方法声明为泛型,调用时必须精确关联的类型小心:
x==a[I]
对于大多数不是枚举类型的类型都会失败。在Java中,
=
比较引用,这意味着只有当操作数是完全相同的对象时,它才会计算为true,而不是检查等价性。顺便说一句,
linSearch
没有理由是泛型的--
public static int linSearch的声明(Object[]a,Object x)
将接受完全相同的可能参数,并以相同的方式工作。我没有JDK来进行测试,但我认为调用方法的正确语法是linSearch(createSequence(n),x)。您的方法声明为泛型,在调用它时必须精确关联的类型小心:
x==a[I]
对于大多数不是枚举类型的类型都会失败。在Java中,
=
比较引用,这意味着只有当操作数是完全相同的对象时,它才会计算为true,而不是检查等价性。顺便说一句,
linSearch
没有理由是泛型的--
public static int linSearch的声明(Object[]a,Object x)
将接受完全相同的可能参数,并以相同的方式工作。通常,类型B的容器对类型Bagree的可浇铸性较差(或根本不可浇铸)。类型B的容器对类型B的可浇铸性较差(或根本不可浇铸)