宜春 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 我这模型写的不对吗?为什么lingo解出来的下面影子价格这一溜少一个变量
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波