java反编译泛型_Java泛型反编译

没有区别,因为T默认是extends Object的,反编译之后就是都是9253c61ba018d5210d7a8cb43b30e70b.png

方法泛型调用

在JVM加载字节码不存在,只是编译期存在9e8005a6b57ccb2dbb3ba3425ba6d68a.png

123376f472e89d150c9c589d4025abd3.png

46c401d1cd6cf10515e21cf6e920adbc.png

ccf25ca4c35a1a571bc0e94905f61f7e.png

使用泛型类JVM加载字节码存在 具体泛型类型,没有所谓的占位符(运行期存在)49b52a98e3cb42677b275c4ba8e46e63.png

3735b71c82d446718e38b4f6c4bc1bcb.png

9c3e0a63739abf7385ffee3534761a5f.png

声明的泛型方法 中的是存在jvm字节码的只不过这个E类型是Object,有占位符(运行期存在)2592eb0147415679d822cf24f03b863e.png

072ddeb7e7451a7af62915e82d12e63e.png

55f31e41228b094252e5b29e7341b830.png

泛型类定义的是存在JVM加载的字节码文件的只不过类型为Object,有占位符(运行期存在)

94aa3052a5fd0a465fe7f904dfc885ad.png

54fe96a3cf77d1df2e7e5cefa0e4752b.png

extends Number> 被jvm加载 运行期存在 f806342f9a41bdd8052fb2afaf4c5620.png

5d53a7d557eefa42fb6a23822d6326db.png

0ed3a42839f18d52b6c84bdc03b4b838.png

在方法上 extends Number> 一样被jvm加载 运行期存在 c01b15fcb3d78c5dbf9b2da958d4f90e.png

b498a001878041d2e603d514fe8d9240.png

12827da01ebc64c7804074a48136ccc1.png

super Number> 被jvm加载 运行期存在 9de55863b02ac7ae15c11bffda8650f3.png

275eb51713fa7aca754224a08dccb326.png

a8640dfb9bfb087007fd15820dbf0705.png

> 被jvm加载 运行期存在 faf9caa360bcde120358fd49da514549.png

20ac1dd96c929cae195326dd97d58a9a.png

435d15e7486187f1874a2110f9b43101.png

extends T> 被jvm加载 运行期存在 92998808b096071416297a7a32818aa8.png

21cc33a52186f7a4e4019ea38fae222d.png

e2a55ec6ac70848f3c45c572e5dd209a.png

方法上定义的List 运行期存在cf7a9974f6cb74e43acc1b95ea59cbb5.png

abb618e23632b7217d7078a91f00841b.png

4057a111e81243d1f1ac5a321b9b3a07.png

运行期存在 a16556335501ae7876f95706b194c49a.png

5357efea7a59ff10e44e79929c4be482.png

9ad790e339cef885d6050e549a15fa9d.png

> 存在 >29cd1ca6d303ad1ad17835d60315c1b9.png

65c1cf8b75b6aaf681e90b97275b08bd.png

cf56097039100b856e1e72a3d91ef58b.png

>存在>ca2cd20d8567ea14c4e39dcc4e87efe7.png

6a6da8a77c80226581f6919ea32bea09.png

6a3a696171fd82180b97b1077e2346f2.png

7f912e0efc7bec15ece049dcc7af4fd4.png

不存在eeaaae141126ea19380a2859435091c0.png

>存在 >eaf9648ed7d9d3b9aca0897cfd631e7f.png

5b600e67841ecb124405e22fbc9dcb3b.png

190619a1f9f22e4c608c09f707839c7b.png

44707be7099523d2196e82f900287d41.png

Class  存在 Class 这个T类型是Number类型 这个T必须是满足是继承Number类型或Number类型本身,并且实现了List接口 super String> 这个T Class里面本身定义的是Object类型,这里存放进行的T一定满足是继承Number或Number类型本身 &实现了List接口 super String> 这个List里面的元素必须是String的本身或String的父类。List本身定义的是Object类型2d11253f99ccf17add1a160b4870679f.png

033cbf21f0a3edd11f0766330f2ea76b.png

17638da9bcf3ab6be5dd608d352bc0a7.png

List super的元素必须满足 String类或String父类 jvm存在List

36c87010759887969f528b7b87d73825.png

82683aae59b716ecfd160acf2283e58d.png

146be10c2c60704e18823e1b28ab85ad.png

5e18e36b3e0f76b0905dddc40c5d6d7c.png

多个&之间使用的时候必须要满足条件

1d5304787aef27b61614620a13525dfb.png

d9ab5145624aa02b14a64f889df4e724.png

12647dfc18e6f2720970b15644ac5b5c.png

da1edc534f3019ac34ea26c61aa9f404.png

Class>  存在e68b50f422f99eef9ff0c4cd92876e1f.png

e590eff21ebfbac54fc70a81825ba6db.png

523f34f710a93ef6984507be3833cefa.png

3b6fd15d0a1feecdaab0d21b0db8ecb1.png

Class extends Number> 存在 类型是Number或 Number的子类 跟 使用?当前类泛型的定义没有关系37c85ebf0c6d6a9caf7172d44a62c011.png

cca352349946a11e20f8f5e2faa467ce.png

58cd32e275da7c1f1652e7b714fb3a82.png

44965650d5ce339367b9ab8351696838.png

使用?跟当前类定义的泛型没有关系d4d8b259c4cd261b7d7636f31e996432.png

f05b92d7ccf55118ddab1da0b0dfbb82.png

get出来的是Number类型f4b0b86f54ccc7befec0468042af1a65.png

堆空间的对象元素是有泛型的,栈空间指向这个堆空间对象情况下

(使用没有指定泛型类情况下)类定义的泛型 跟实例化出来该类型的对象无关系

在方法上List list = new ArrayList();

在方法上List list = new ArrayList();

list 跟 ArrayList都是同一种类型

但里面的泛型元素就有关系了(没有指定泛型)会出现类型转换错误

在使用限定泛型就会进行泛型检测,会编译不通过

不指定泛型,该对象变量,什么泛型类型的同类型都可以指向,虽然它们里面的泛型不是同一个类型3df0652dafd820aa60ebb55474f37b8e.png

a9b88632872ced736f8bce3a9c705ffb.png

2530942403d96f01f512358d9816d078.png

T类型被标识为Integer类型91c687ebb3c8bf534557b7c2a34260e7.png

但只要涉及Class里面定义的泛型T使用,如果使用的时候T类型不匹配类型就会错误,没有使用就无所谓

返回的元素都是当前类定义的泛型类型

原本Class类定义的是T是Object类型

在别的类定义了一个泛型CurrentClass 就是 CurrentClass

那么使用在CurrentClass这个Class类的时候 Class 就是 Class 这里的T指代T:Integer 而不是Object了

这个T就是 当前泛型类定义的 T:Integer类型

在CurrentClass操作Class泛型T类型都是当前类定义的T:Integer类型,那么Class类源码定义的泛型都是当中Integer类型使用

使用T泛型类型必须符合Integer相关语法操作,比如不能从String类型转换到Integer类型

默认就是 0c1c5a1e11f971868c2c8668b231238e.png

6a6ff3df9f9c14156fb4f6f74bfb2071.png

Class里的方法返回的T类型编译器就当做是Integer

c06aa2bb8acf76db87b35f9c07bfb4ca.png

这个T就是Integer8de189d114652022fea424a0dc92723b.png

在方法泛型上会进行泛型检查,没有类泛型5b60f5405294d8462990a655cdaa1529.png

82ef67cefabf446c4231c51c2437f735.png

当方法定义为泛型,类也定义为泛型,方法里面的,方法内部T是使用方法泛型的T

此时必须在main方法指定泛型才会进行泛型检查,类使用的泛型检测类的,方法使用的泛型检测方法的泛型的

当类没有定义泛型的时候,直接使用方法泛型里使用直接检查,不管有没有指定泛型都是有泛型约束

当类定义泛型的时候,方法也定义泛型,在main方法不使用类泛型,方法泛型也不会进行泛型检查,

不会进行泛型检查,但是方法内部都是方法定义的泛型类型。

因为方法泛型检查是按照类的实例来的,否则方法泛型定义为静态方法泛型3d46bc142f1d3bef352e18cfc82d7155.png

04e8511581c651b63d21956eb4f4e2fe.png

0a94b473b823522b5026265f2ad46205.png

类泛型里面使用方法参数泛型,必须在main方法指定泛型才会检查,否则无泛型约束

没有方法泛型,有类泛型,方法定义中的T就是使用类的(直接泛型约束),否则就是使用方法泛型的

此图无泛型约束820367979367a9f6d7f1e41ed0d05d6e.png

93f92b35ef700026bb47b61c1a5d7376.png

Test

Set780fdee26a6ff6f37fedebb63e920b75.png

bd2eefb887c6c7b1ee8c67aa70db0cac.png

0a7597709a56764dcc36620b9bb8a542.png

28df6c1b7cdd83a2ed08282095bf28cf.png

1e69938afc237d554f6988aa890efb71.png

3a174732874ce667c761b0f440100d69.png

44235c295300d4da623d17b73cb126cc.png

b3c93df22c1e4e365ade2245a72023c6.png

c163c5d9b663a9361853b68da1ec5e96.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值