gpt4 book ai didi

java-8 - javac -parameters 标志的缺点

转载 作者:行者123 更新时间:2023-12-03 23:18:50 27 4
gpt4 key购买 nike

我想尝试一些在运行时需要参数名称的框架功能,所以我需要使用 -parameters 编译我的应用程序并将参数名称存储在 JVM 字节码中。

除了 jar/war 的大小之外,这个参数的使用还有哪些缺点?

最佳答案

JEP 118 涵盖了向类文件格式添加参数名称。 ,它是在 Java 8 中提供的。关于为什么在 OpenJDK 电子邮件线程 here 中包含参数名称是可选的,有一些讨论。和 here .简而言之,使参数名称可选的原因是担心类文件大小、兼容性表面和敏感信息的暴露。

兼容性表面问题值得进一步讨论。上面链接的线程之一说更改参数名称是二进制兼容更改。这是真的,但仅限于 JVM 二进制兼容性概念的严格上下文中。也就是说,更改方法的参数名称永远不会改变该方法是否可以被 JVM 链接。但该声明通常不适用于兼容性。

从历史上看,参数名称一直被视为局部变量名称。 (毕竟,它们在范围内是本地的。)您可以随意更改它们,并且方法之外的任何内容都不会受到影响。但是,如果您启用对参数名称的反射访问,突然间您无法更改名称而不考虑程序的其他部分可能正在使用它。更糟糕的是,除非您对所有参数名称的使用都有严格的测试用例,或者您有一个非常好的静态分析器可以找到这些用例(我不知道有一个),否则没有什么可以告诉您。

评论链接到关于使用 Jackson(一个 JSON 处理库)的问题,该问题具有将方法参数名称映射到 JSON 属性名称的功能。这可能非常方便,但这也意味着如果您更改参数名称,JSON 绑定(bind)可能会中断。更糟糕的是,如果程序基于 Java 方法参数名称生成 JSON 结构,那么更改方法参数名称可能会默默地更改数据格式或有线协议(protocol)。显然,在这样的环境中,可靠地使用此功能意味着您必须进行非常好的测试,并在代码周围添加注释,指示哪些参数名称不得更改。

关于java-8 - javac -parameters 标志的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44067477/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com