加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:09:32 所属栏目:Java 来源:网络整理
导读:我想尝试一些在运行时需要参数名称的框架功能,所以我需要用-parameters编译我的应用程序,它将在JVM字节代码中存储参数的名称. 除了jar / war的大小之外,这个参数用法存在哪些缺点? 解决方法 JEP 118提供了类文件格式的参数名称,这是在Java 8中提供的.有一些
我想尝试一些在运行时需要参数名称的框架功能,所以我需要用-parameters编译我的应用程序,它将在JVM字节代码中存储参数的名称.

除了jar / war的大小之外,这个参数用法存在哪些缺点?

解决方法

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

兼容性问题的问题值得进一步讨论.上面链接的一个线程表示更改参数名称是二进制兼容的更改.这是事实,但仅限于JVM二进制兼容性概念的严格上下文.也就是说,更改方法的参数名称永远不会改变JVM是否可以链接该方法.但该声明并不代表一般的兼容性.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读