问题标签 [immutables-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何将不可变库与接口一起使用
我想让不可变对象成为我的 DTO 对象。为此,我想使用http://immutables.github.io/。
我有下一个遗留层次结构:
为了保持向后兼容性,我想实现一个新的接口和实现,如下所示:
这应该生成 ImmutableInterface3 类,以便能够获得构建器并能够构建类实现。
问题是我不能使用下一条语句:
这个解决方案有什么问题吗?
java - 如何将 Jackson PropertyNamingStrategy 与 Immutables 库一起使用
我正在使用https://immutables.github.io/库和杰克逊。我希望我的课程是杰克逊可序列化的。我想使用自定义PropertyNamingStrategy
(配置为com.fasterxml.jackson.databind.ObjectMapper
使用 mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
不幸的是,Immutables 库将@JsonProperty("propertyName")
生成代码的每个字段都放在了其中。这会覆盖在映射器级别(或在类级别,使用@com.fasterxml.jackson.databind.annotation.JsonNaming
注释)定义的 PropertyNamingStrategy。
是否可以让 Immutables 库停止为每个字段放置属性名称(使用org.immutables.value.Value.Style
或类似方式)?
我提供了解决方法,将@JsonProperty(没有价值)放在每个属性上,但我对此并不满意。
java - 如何使不可变库跳过序列化可选字段
我正在使用 Immutables 库(https://immutables.github.io)。我需要我的类序列化为 JSON(我使用 Jackson)。我想跳过输出 JSON 中的可选字段。在 Immutables 之前,我@JsonInclude(JsonInclude.Include.NON_EMPTY)
在课堂上提供。
看来,Immutables 不尊重该注释。如果我用它注释每个可选字段,@JsonInclude(JsonInclude.Include.NON_EMPTY)
它就可以正常工作。
是否可以使用类级别(不是字段级别)注释指示不可变对象跳过序列化空选项?我看到org.immutables.value.Value.Style#additionalJsonAnnotations
了,但没有使用它自定义传递的注释。
我的类路径中有 jackson-datatype-jdk8,我com.fasterxml.jackson.databind.ObjectMapper
有
mapper.registerModule(new Jdk8Module().configureAbsentsAsNulls(true));
java - Java Immutables 库:检查所有选项是否为空?
我想确定一个不可变Optional
的所有成员是否都是空的。有没有办法自动执行此操作而无需手动检查所有已知的 Optionals?
我担心即使确实为每个可选成员写了一张支票,也会有人稍后出现并添加一个可选字段而不更新该方法。
java - 将元素添加到 Java 不可变队列
我希望有人可以帮助我解决我的小问题。我按照我的接口不可变队列以这种方式定义了我的 EmptyQueue 和我的 NotEmptyQueue。主要问题是应该向 myQueue 添加元素的方法 enQueue 不起作用。请帮助我:
界面:
空队列:
NotEmptyQueue:
java - 如何建议让 Immutables 用这种类型构建这个对象
我怎样才能让 Immutables 生成具有这种类型的类
注意:空集是从某个外部数据源传入的真实集的占位符,我还没有开始填充它,但我会在某个时候填充它,排序是对 Spring Security 中的重新实现,您应该假定排序需要应用于将传递给 Immutables 构建器的任何集合。
java - java org.immutables 库:地图中的所有重复插入
我正在使用java 不可变库。
ImmutableFoo.builder().putBar(1, "asdf").putBar(1, "ghjk").build()
导致重复键错误。有没有办法避免这种情况?
- 如果我遇到具有不同值的同一个键,我想用新值覆盖旧值。
- 如果我遇到具有相同值的相同键,我想忽略它。
java - 运行测试时如何防止 IntelliJ 删除从生成的源编译的类?
IntelliJ (v2016.3) 中 JUnit 测试的默认配置是Build
在启动前运行。通常,这是一件好事,因为它确保在运行测试之前已经应用了所有更改。但是,它似乎正在删除生成代码的编译类。正如您所料,这意味着测试失败,因为生成的类的测试无法再找到他们试图测试的类!
如何在运行测试时保持 IntelliJ 的默认“启动前构建”行为,而不会让我编译生成的类被吹走?
现在了解一些细节。
我使用的是Immutables库(不是 Lombok),所以它是使用“普通”Java Annotations 机制生成的代码。IntelliJ 很高兴地接受更改并通过注释生成 Java 代码。它还将在更新生成的 Java 文件发生更改时对其进行编译。因此,一般的“自动构建”行为似乎正在起作用。对我来说,这似乎表明我正确设置了注释处理器。
但是,当我手动运行“构建模块”或在测试之前运行“构建”时,生成的 Java 文件的类文件将被删除。生成的 Java 文件不会以任何方式更改,但它们编译成的类文件会被删除。对我来说,这意味着 Build 有一些东西没有关注 Generated Source 依赖项。
我注意到的一件事是,如果我不将生成源的目录标记为 Generated Source Root,则不会发生这种“删除生成的源文件的类文件”行为。这样做的缺点是 IntelliJ 不再识别生成的类,并在使用它们的代码中将它们标记为未知。
我如何配置 IntelliJ:
Preferences -> Annotation Processors
正在使用Module content root
,Obtain processors from project classpath
, 并指定了生产和测试源目录字段(并且似乎在生成源文件时尊重那些)Preferences -> Compiler
不使用和正在使用_Clear output directory on rebuild
Build project automatically
File -> Other Settings -> Annotation Processors
具有与上述两点相同的配置- 正在生成源的目录被标记为 Generated Source 目录
我一直在为此苦苦挣扎太久,尝试了我能想到的一切以及任何人甚至暗示的一切,但无济于事。任何有关如何使这项工作的帮助(“从测试配置中删除构建选项”除外)都将非常有帮助并深表感谢。
java - Immutable 中的可变项
当我们使用不可变对象库创建不可变类时,我们如何处理可变成员(例如juDate)?
注意:这与java Date 类无关,与不可变对象java 库完全相关,后者将生成一些代码!
例子:
有没有办法覆盖getter,以便它返回一个副本?
java - 杰克逊子类序列化
我正在使用我不拥有且无法修改的 java API。该 API 定义了一个类Aggregation
,该类是Immutables
具有 Jackson 序列化和反序列化的 (immutables.github.io) 抽象类。
班级看起来像
我想向 Aggregation 添加一个字段,该字段应在序列化时提取,但仍可以将其实例传递给接受的方法Aggregation
。
我想做类似的事情:
这可能吗?