为什么要区分静态方法中的泛型呢
Topic source这实际上和类型泛型擦除有关,你看了下一节就明白了。
因为普通的方法是通过类的实例来调用的,创建实例的过程调用了构造方法,也就是说对象已经知道这个时候类上面定义的<T>的具体类型了;
而静态方法不需要对象实例来调用,所以也就不知道<T>的具体类型,虚拟机不允许这种情况发生,所以编译的时候就报错了。
用个老师的例子:
Pair<String> p = new Pair<>("Hello", "world"); //创建实例时已经知道<T>是String类型
String first = p.getFirst();
Pair.create(...); //如果是静态方法,则并不清楚<T>的具体类型
<K>放在static后面,你可以理解为既然静态方法不知道Pair里面的具体类型,你就手动的告诉它具体的类型。
- 1
零度的花火
如题,我不太明白为什么要区分开,而且为什么<K>要放在static后面而不是其他地方呢