为什么这段代码没有显示任何编译错误?
public class Generic
{
public static void main(String[] args)
{
Character[] arr3={'a','b','c','d','e','f','g'};
Integer a=97;
System.out.println(Non_genre.genMethod(a,arr3));
}
}
class Non_genre
{
static<T> boolean genMethod(T x,T[] y)
{
int flag=0;
for(T r:y)
{
if(r==x)
flag++;
}
if(flag==0)
return false;
return true;
}
}
如果我们像这样写一个正常的代码(如下所示)
public class Hello
{
public static void main(String[] args)
{
Character arr=65;
Integer a='A';
if(arr==a) //Compilation Error,shows Incompatible types Integer and Character
System.out.println("True");
}
}
那么为什么上面运行正常,T 是 Integer 类,T 的数组又是 Character 类,如果它运行那么为什么它不打印 true,'a' 的 ASCII 值是97,所以它应该打印为真。
最佳答案
因为编译器将 Object
推断为您调用
Non_genre.genMethod(a, arr3)
在该方法的主体内
static <T> boolean genMethod(T x, T[] y) {
您的类型参数 T
是无界的,因此只能被视为一个 Object
。
因为 x
和 y
的元素属于同一类型 (T
),所以可以很好地比较它们。
if (r == x)
关于java - Generic 方法中的参数如何同时分配给 Integer 和 Character 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31231660/