宜春 2019-11-01 09:21 采纳率: 50%
浏览 257

Class<T>、Class引发的小故事,大佬大佬快进来QAQ,help!!!

String.class 的类型是 Class< String >
因class是关键字, 所以类名.class编译时确定。而getclass()是某个具体的方法来调用,是运行时根据实际实例确定,getClass()是动态而且是final的。

基本数据类型的封装类还可以通过.TYPE 的方式获取其 Class 对象,但要注意。TYPE 实际上获取的封装类对应的基本类型的 Class 对象的引用。

问题1、Class< T >就是Class类,只不过是类型为T的类,所以Class< T >可以叫做是类实例、类类型但是还可以叫字节码文件?

问题2、 Class< T >和Class类是同一者,只是前者的类类型为T,这个我没理解错吧?

问题3、明明用.class方法就可以获取对应的class字节码对象,为啥基本类型包装类还要用.TYPE方式去获取?可不可以就只用.class方式获取?(而且.TYPE方式获取的还是对应的基本类型的 Class 对象的引用,并不是class对象)

 public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
  • 写回答

1条回答 默认 最新

  • _鹿慕溪水 2019-11-01 09:48
    关注

    单独的T 代表一个类型 ,而 Class代表这个类型所对应的类,
    你对java的反射理解有些偏差,所以问题2也是错的class和class对象是不一样的,你可以理解为class就像药品的说明书,而对象就是药品,每个对象的class都有说明书,你可以根据说明书制作相应的药品,你也可以根据药品得到对应的说明书。
    问题三说的基本类型的包装类通过.class方法得到的是这个包装类本身的说明书,而通过.TYPE得到的是被他所包装的基础类型,如果你了解过java基础类型的自动装箱,你就能更好的理解基础数据类型和他们对应的包装类的关系以及实现,Integer的.TYPE方法的源码如下

    public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
    
    评论

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试