Java 方法最多支持多少个类型参数(3)

```shell
>>> error: UTF8 representation for string "<A1:Ljava/lang/Objec..." is too long for the constant pool
>>> largest type: 2776
``` [本文来自:www.11jj.com]


[本文来自:www.11jj.com]

虽然上面的报错信息有点难以理解,但事后看来是还是可以知道限值大小。编译器生成的 class 文件包含了许多字符串,其中包括类中每个方法的签名。这些字符串存储在常量池中,JVM 规范中常量池[最大65535字节][2]。


[2]:https://docs.oracle.com/javase/specs/jvms/se12/html/jvms-4.html#jvms-4.4.7


所以,之前的猜测都不完全正确。类型参数最大数量不是固定值,视具体情况而定。尽管如此,不是编译器本身导致报错<sup>3</sup>,而是 JVM class 文件格式限制了类型参数的最大个数。尽管 JVM 不处理泛型,但结论是对的。


这意味着,类型参数的最大数量完全取决于如何定义方法<sup>4</sup>。我尝试了一种新的类型参数编码方式,在脚本文件中使用 write_type_compact,全部使用合法 ASCII 字符(A-Z, a-z, $ 和 _ )。这种实现有点复杂,可以使用 0-9 但不能用作标识符的初始字符,而且不能使用 Java 关键字。通过把 `if`、`do` 替换为长度相同的 UTF-8 字符,参数的最大数量从2776增加到3123。


_A 是合法 Java 标识符,但 _ 不是。这点不是很方便。庆幸的是,即使不使用 _ ,脚本顺利生成了3392个2字节的类型参数,所以我不觉得有必要考虑 _ 作为首字符的情况。


还有一个技巧

自媒体 微信号:11jj 扫描二维码关注公众号
爱八卦,爱爆料。

小编推荐

  1. 1

    特价机票同程(机票预订同程)

    大家好,小豪今天来为大家解答特价机票同程以下问题,机票预订同程很多人还不知道,现在让我们一起来看看吧!1、 价格是否低于平均水平:你可

  2. 2

    从头肉到尾的小说(从头肉到尾的小说)

    大家好,小豪今天来为大家解答从头肉到尾的小说以下问题,从头肉到尾的小说很多人还不知道,现在让我们一起来看看吧!1、我只看过一部这样的

  3. 3

    白 鸽

    凡夫夕拾 2024-04-09 11:44 上海我没有想到,像我如许一个无足轻重的知青,期近将与我插队生活了八年的松树沟道别的最后一刻,竟会有这么多老乡来

  4. 4

    死沼巨鳄在什么位置(死沼巨鳄在什么位置)

    大家好,小伟今天来为大家解答死沼巨鳄在什么位置以下问题,死沼巨鳄在什么位置很多人还不知道,现在让我们一起来看看吧!1、就在尘泥沼泽中

  5. 5

    我市以新乡人、原乡人、归乡人为主体,将新农人队伍建设作为推进乡村振兴“换人超车”之举——万千现代新农人 筑梦绿水青山间

    村庄振兴,人才先行。本年中央一号文件凸起强调了“强大村庄人才部队”,就村庄人才振兴作出了周全布置。这也表明,落实村庄人才振兴计谋既

  6. 6

    测手速的软件游戏(测手速的手机软件)

    大家好,小伟今天来为大家解答测手速的软件游戏以下问题,测手速的手机软件很多人还不知道,现在让我们一起来看看吧!1、《我手速超快》《我

  7. 7

    绍兴事业单位招聘网(绍兴事业单位招聘网官网怎么登录)

    大家好,小娟今天来为大家解答绍兴事业单位招聘网以下问题,绍兴事业单位招聘网官网怎么登录很多人还不知道,现在让我们一起来看看吧!1、

  8. 8

    本科一批b(本科一批b段可以报几个志愿)

    大家好,小伟今天来为大家解答本科一批b以下问题,本科一批b段可以报几个志愿很多人还不知道,现在让我们一起来看看吧!1、本科一批B是指高考

Copyright 2024.依依自媒体,让大家了解更多图文资讯!