首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java 12中迁移nashorn代码?

如何在Java 12中迁移nashorn代码?
EN

Stack Overflow用户
提问于 2020-05-12 16:53:37
回答 1查看 1.6K关注 0票数 0

我有一个遗留应用程序,我正试图将它从JDK8转换为JDK12。我遇到麻烦的地方之一是下面的代码..。

代码语言:javascript
复制
import jdk.nashorn.internal.ir.annotations.Immutable;

import java.util.Base64;

@Immutable // <-here
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public final class Application {
    ....
}

当我试图用IntelliJ构建时,我得到.

错误:(6,43) java:包jdk.nashorn.internal.ir.annotations不存在 错误:(10,2) java:找不到符号符号:类不可变

这段代码不容易理解,我也不知道它是用来做什么的,但是谷歌搜索表明它允许Java运行ES5。它似乎也被反对,并将很快被移除。最后,它是ES5而不是ESNext,所以我想使用一些更新的东西。

  1. 这是什么用途(我猜是JSON序列化,但为什么不使用GSON或Jackson呢?)
  2. 我能用什么来代替它呢?它将是与Java12+兼容的?

如果我删除它,下面的测试失败..。

代码语言:javascript
复制
@Test
public void equalsTest() {
    EqualsVerifier.forClass(EvaluationResult.class).verify();
}

带有以下错误信息..。

代码语言:javascript
复制
[ERROR]   EvaluationResultTest.equalsTest:42 Mutability: equals depends on mutable field id.
For more information, go to: http://www.jqno.nl/equalsverifier/errormessages
EN

回答 1

Stack Overflow用户

发布于 2020-05-12 18:34:40

EqualsVerifier的搜索发现了关于它的不变性概念的文档。

如果不能使字段成为最终结果,但绝对确定类是不可变的,则可以向类添加一个@Immutable注释。注释从何而来并不重要;您甚至可以自己编写一个注释,只要它称为Immutable

因此,Nashorn @Immutable注释似乎只是为了方便使用,任何同名的注释都可以,即使是在您自己的项目中定义的注释:

代码语言:javascript
复制
package my.legacy.project.annotations;

/**
 * Tag for classes that are immutable.
 */
public @interface Immutable {
    //empty
}

或者,如果您可以使EvaluationResult的所有字段和它包含的所有对象的字段都包含final,那么文档表明将不需要注释,但如果需要与JSON一起使用,则可能无法使Application不可变,这取决于所使用的JSON库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61757406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档