问题标签 [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.
guava - Findbugs 错误 - 使用 ImmutableSet.Builder 时的 RV_RETURN_VALUE_IGNORED
Findbugs 对以下代码段发出警告。似乎是一个简单的Builder
类,可以在最后添加项目和构造。这里有什么问题?
java - Java Immutables 合并从可选字段创建的对象
我正在开发一个命令行工具,我试图最小化用户输入的数量,但最大化功能。我已经开始在资源文件夹中设置一组默认输入,这些输入允许代码在没有用户输入的情况下运行。我正在使用不可变库来处理这个问题,所以我有一个像这样的类型(米老鼠示例):
如果我希望用户能够覆盖任何、部分或全部这些值,我有另一种具有相同字段的类型,但包含在选项中。
当我想合并这两种类型时,我有一个方法可以逐字段检查可选类型并重建非可选类型。
这一切都很好,但是它有很多样板代码,我想知道我是否最好采取不同的路线。当 10+ 类型中有 10+ 字段时,它变得相当麻烦。我考虑过使用反射,但我总是对此有点厌倦,因为这通常意味着我是某种模式。
java - 如何将 spring application.yml 文件中的字符串列表读入 Immutables 对象?
这是一个示例application.yml
文件
这是我的不可变配置类
这是我的顶级配置类
它读取teststring
值很好。但是testlist
是空的。
请注意,testlist
如果它没有包含在 Immutables 中,我可以阅读罚款 例如,如果我将 application.yml 更改为
我将我的顶级课程更改为:
然后testlist
正确填充。
所以我假设它与不可变库处理 spring 配置文件中列表的方式有关。
java - 检测具有相同完全限定名称的多个类
我的具有多个子项目的 Java 项目正在将Immutables库用于值对象。
这会在同一个包中生成一个名为foo.bar.ImmutableBaz
实现Baz
接口的类。另一个子项目最近在同一个包中声明了另一个同名接口foo.bar
,但容器类不同。这导致了第二foo.bar.ImmutableBaz
类的产生。这两个类无意中以相同的完全限定名称结束,这导致在运行时加载错误的类出现问题。
我如何最好地检测这些命名冲突,例如在测试中或作为 CI 管道的一部分?
我知道我可以使用 Immutables 指定目标包,但我希望检测并避免无意的冲突。
java - Mapstruct 没有为 Immutables 生成的可选属性选择重载方法
我正在使用Immutables生成一些类 DTO 类,并使用 Mapstruct 将 JPA 实体映射到 DTO。只要 DTO 仅具有必需的属性,这将非常有效。如果不需要属性(通过使访问器方法返回一个Optional
,根据docs),由 Immutables 生成的构建器将有一个带有Optional
参数的 setter 方法,Mapstruct 将失败:
有道理,谢天谢地,还有一个选项可用于生成采用可为空参数的方法。此选项生成一个附加方法,该方法采用可为空的参数。但是,无论此方法是否存在, Mapstruct 似乎都失败了。
作为一种解决方法,我实现了这个可憎的(但此时我宁愿自己实现映射方法):
有没有办法让 Mapstruct 寻找重载的方法(或先查看“正确”的方法)?我是以错误的方式解决这个问题还是只是错过了一些东西?谢谢!
java - 我可以使用 Immutables 类作为 gradle 插件扩展吗
我正在用 Java 编写一个 gradle 插件。为了使其可配置,我想定义一个扩展对象。由于这本质上是一个值对象,我想我会使用 Immutables 来定义类,以减少代码量。但是,这变得很困难,我想知道这是否可能?
我尝试的第一件事是定义一个简单的不可变类:
然后将其添加为扩展名:
这失败了:
使用接口而不是抽象类定义不可变对象会产生相同的错误。然后我尝试通过不可变类代替,使用:
但是,这会失败并出现不同的错误:
似乎 gradle 要求扩展类是可扩展的,而 immutables 总是生成final
类。有什么办法可以让它工作吗?
java - 如何使用 Java Immutables 设置默认参数?
我想从生成的代码中创建一个 Immutables 类,如下所示。
我想使用生成的代码以下列方式创建一个 myInterface:
MyInterface testObject = ImmutableMyInterface.of(1, 2).withC(3);
但是,在不可变类中似乎没有生成“WithC”方法,我无法设置它。
如果没有设置,我怎样才能让 ac 字段具有默认值,但可以像上面那样设置?
java - Java Immutables Annotations 可以用来创建与基类同名的生成类吗?
是否可以让生成的不可变文件与基本文件具有完全相同的名称?
我可以使用 style(typeImmutable = '*'),但这会给我错误:
我想做的甚至可能吗?
java - Jackson 不会在 org.immutable 接口上反序列化
以下情景。
具有以下类的小型 SpringBoot 应用程序:
美食:
FooJsonMapper:
和这样的 JSON:
不知何故,当运行代码杰克逊报告如下:
我可以确认 json 是正确的,因为以下代码行Object
使用其中的数据创建 s:
我也尝试@Value.Style(builder = "new")
在FooDto.class
这里使用:https ://immutables.github.io/json.html
- 杰克逊:2.12.3
- org.immutables:2.8.2
编辑:
根据要求使用 Builder 的 ImmutableDTO:
java - 如何将属性与 immutables.org 库绑定?
我知道在 Spring 中可以从属性文件中绑定一些值,如下所示:
在我正在为他们工作的当前项目中,他们热衷于使用不可变库。
他们有一个不可变的“类”,需要一些可配置属性的验证。一个例子:
这将生成一些不可变的样式类,例如:
值的长度需要针对不同的环境进行配置,但我似乎无法弄清楚在已经存在的界面中可以配置一些东西。甚至可能吗?