楼主的代码是可以编译通过的(忽略拼错成小写的 Integer 的问题)
的确 int 和 Intege 是两个完全不相容的类型,但在 jdk 的泛型化定义里面,所有 primative type 的 representing Class instance 的泛参类型就是其所对应的 wrapper class (泛参类型不可以是 primative type)
int.class / Integer.TYPE / Class.getPrimitiveClass("int ”) 都是同一个实例
而且看 java.lang.Integer 的源码,有很清楚的定义
/**
* The {@code Class} instance representing the primitive type
* {@code int}.
*
* @
since JDK1.1
*/
@
SuppressWarnings("unchecked")
public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
而且这几个 primitive type 所对应的 class instance 有些很有意思的特性
可以试运行一下以下这段代码:
https://gist.github.com/lwr/666d1a4ce985810ce3318cbe1ad76fb0(要让它能跑起来,还需要实现两个很简单的方法)
我们还可以发现最后一个比较有意思的 primitive type: void <-> Void
虽然 void 不代表任何内容, 但在语言层面还是给它留下了两个 class 实例