java - Generic 方法中的参数如何同时分配给 Integer 和 Character 类?

标签 java generics integer character generic-method

为什么这段代码没有显示任何编译错误?

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

因为 xy 的元素属于同一类型 (T),所以可以很好地比较它们。

if (r == x)

关于java - Generic 方法中的参数如何同时分配给 Integer 和 Character 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31231660/

相关文章:

java - 我想在位置 2 处插入一个新元素并将其他元素向下移动一步?是否可以

C++:在基类中使用带有泛型虚函数的异步回调

swift - 泛型的扩展在 swift 中被限制为另一个泛型

Android:为什么当计算量增加时整数计算比浮点计算慢很多?

java - File.mkdir 不会抛出 IOException 但 File.createNewFile 会

java - 运动检测VLCj

java - 如何添加锁以从文件方法读取和写入

java - 为什么这个带有泛型返回的方法不能正确使用泛型类型?

python - 反转 32 位整数

javascript - 如何在 Javascript 中使用整数键初始化静态值的 HashMap ?