java - 使用两个不同的泛型参数调用泛型函数仍然可以编译

标签 java generics compilation compiler-errors

下面的代码怎么可能编译通过?据我所知,count 函数是用两种不同的类型调用的,但编译器并没有提示,而是愉快地编译了这段代码。

public class Test {
        public static <T> int count(T[] x,T y){
                int count = 0;
                for(int i=0; i < x.length; i++){
                        if(x[i] == y) count ++;
                }
                return count;  
        }
        public static void main(String[] args) {
                Integer [] data = {1,2,3,1,4};
                String value = "1";
                int r =count(data,value);
                System.out.println( r + " - " + value);
        }
}

最佳答案

T 被向上强制转换为 ObjectInteger[] 可以向上转换为 Object[]String 可以向上转换为 Object,并且它类型检查。

关于java - 使用两个不同的泛型参数调用泛型函数仍然可以编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9928723/

相关文章:

c++ - 编译器忽略我的包含 -I 新库版本

c - 如何在 C 中创建编译时条件检查

java - 如何在 Spring 3 中将参数从 View 传递到 Controller

java - 对数组进行排名(不排序或创建对象)并保留原始索引

c# - 在这种情况下,C# 泛型会阻止结构的自动装箱吗?

c# - 通用 List.Count 给出 System.ArgumentException

c# - 为什么人们不将依赖属性包装在通用类中?

java - 使用 flandmark (Javacv) 显示每个关键点的协调

java - 类似的 C# .net lambda 搜索 java 7 通用列表

c - 嵌入式设备(微 Controller )静态链接固件中的远程可更新功能或代码