问题标签 [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 - intelliJ IDEA support for immutables with sbt
When using the java immutables library with IDEA and sbt, compilation and running code works fine, but the editor will give "Cannot resolve symbol ..." and "Cannot resolve method ..." errors when using the generated classes.
Following the documentation for setting up IDEs works fine for Maven, but doesn't solve the issues for sbt.
How can we get editor support and code completion working for generated sources on IDEA with sbt?
java - 使用 Immutables 时将注解从接口继承到生成的 java 类
我在我的 Java 界面中使用 Immutables ( http://immutables.org ) 来生成构建器和不可变对象。我创建了一个名为 @Primary 的自定义方法级别注释(表示哪个属性是主字段),我用它来注释我在 Immutable 接口中的一个方法。我在由不可变对象创建的生成的 java 类中看不到注释。我尝试查看 BYOA(自带注释),但这无济于事。
有没有办法将 @Primary 注释放到生成的不可变 java 类上?
更新(基于肖恩的以下建议)
我现在有一个基于以下配置
包信息.java
主要注释
我在 package-info.json 中看到一个错误,其中说 MyStyle 应该在其自己的文件中声明。我不确定上面的配置是否正确。请你能告诉我哪里出错了吗?
java - immutables:我们应该使用 Interface 还是 ImmutableValueObject
问题是关于使用不可变Java 库。
在他们的文档中,他们似乎使用ImmutableValueObject
only 来构造实例,然后在他们使用ValueObject
(接口或抽象基类)的代码中,如下所示:
总是只使用 不是更好ImmutableValueObject
吗?
例如:
特别是对于方法参数等,ValueObject
不保证不变性(例如,有人可以只是子类化ValueObject
并传递一个可变实例)。
通常,我想使用接口,因为我可以在测试中简单地使用不同的实现。但是对于不可变对象(它只是一个数据对象),我不需要这个:在测试中我只是按照它应该的方式准备我的对象。
还有其他原因,我失踪了吗?
java-8 - dropwizard 中的反序列化问题,无法转换 ImmutableList到字符串列表
我正在使用具有 java 8 功能的 dropwizard 1.1.0。我也在使用 Immutables 包。尝试将利润中心列表(字符串列表)从 JSON 转换为 java 等效项时,我遇到了反序列化问题。
错误
找不到非具体集合类型的反序列化器 [collection type; com.google.common.collect.ImmutableList 类,包含 [简单类型,类 java.lang.String]]
不可变的 Java 类
Immutables 将上述 DTO 生成到具有以下属性的最终类
在我的 dropwizard 应用程序引导程序中,我注册了以下模块
在我的 POM.xml 中,我将以下内容设置为我的依赖项
java - 在 Immutables 中强制执行特定的 Map 实现
我正在使用Immutables Java 库,如何强制执行特定的地图实现,而不必使用特定的引用?
如果我使用上面的代码,具体Map
是LinkedHashMap
.
如果我使用上面的代码,参考和实现都是TreeMap
.
有没有办法指定Map
为参考但强制执行TreeMap
为具体类型?
java - 通过 Guice 注入 Immutables 类
我正在使用 2 个常见的包,Immutables和
Guice。在运行时发生的第一件事是我将环境和其他来源的设置加载到一个单例、非不可变的配置类中,我们称之为它MyConfig
,例如,公开一个公共getSettingX()
方法。
我有一个抽象的不可变类,称之为AbstractImmutable
。在实例化时需要设置一个基于myConfig.getSettingX()
.
现在,通常我MyConfig
使用 Guice 注入到类中,并且想找到一种方法来实现类的实现(以避免每次构建对象时都AbstractImmutable
必须手动注入类——整个原因是使用果汁开始,MyConfig
管理我的 DI)。但是,由于具体的 Immutables 类是在编译时生成的,因此它不适用于通常的 Guice 注入注解。
Immutables 站点上有使用 builder 包注释静态工厂方法的指示,但我似乎无法弄清楚如何将其添加到抽象不可变类中。
有人有什么建议吗?
android-build - Immutables-library 两次生成相同的不可变类
在多模块 Android 应用程序中使用immutables.iopackage-info.java
注释处理器时,使用文件时构建失败。
我已经设法在 GitHub 上构建了一个最小的测试项目来重现该问题: ImmutablesPackageInfoIssue
该项目由2个模块组成:
- 应用程序:android应用程序:
@Value.Immutable
用于AndroidIm.java
- lib:java模块:
@Value.Immutable
用于JavaIm.java
所以基本上,在两个模块中使用immutables.io都可以正常工作。
但是当我们添加一个package-info.java
文件(到com.example package
模块中app
)时,编译失败并出现以下错误:
出现Dex错误,因为ImmutableJavaIm.java
生成了两次:
- 曾经在 lib 项目中(预期):
\build\generated\source\apt\main\com\example\ImmutableJavaIm.java
- 并且还在应用程序项目中(不应该发生):
\build\generated\source\apt\debug\com\example\ImmutableJavaIm.java
已知的解决方法:
- 删除
package-info.java
文件 - 清除/注释掉它的内容
- 配置构建以忽略
package-info.java
文件
注意:我不能忽略该文件,因为它包含构建的重要注释:例如不可变样式配置
任何想法为什么会发生这种情况或可能是什么原因?
java - 我应该在单元测试中使用不可变对象的真实对象还是模拟对象?
如果我必须测试使用可变实体的服务,我将构建我需要的最小对象(真实对象)并将其传递给我的服务。例子:
显然用户有很多字段,但我没有设置它们,因为resetPasswordService
不需要它们。这对重构非常友好,因为如果我重命名不是电子邮件的用户字段,则不会更改此测试。
当我尝试对Immutables对象执行相同操作时,就会出现问题。我将坚持使用相同的示例,并将 User 从实体转变为不可变的。
java.lang.IllegalStateException:无法构建用户,一些必需的属性没有设置 [postalAddress, signupDate, city, ....]
当构建器尝试构建对象时,它会失败。所以我该怎么做?
- 为用户使用模拟并让它返回模拟,即使每次模拟返回模拟时,仙女都会死去
- 创建一个测试 DSL 并拥有某种工厂来构建包含所有我不需要的字段的整个用户树结构?看起来很重,而且对重构不太友好。这使得测试的要求不那么透明。
- 使用户中
@Nullable
的所有字段并让构建器不验证对象?这会使我面临在生产中拥有不完整对象的风险,对吧? - 我错过了其他选择?
我知道用户应该是实体而不是不可变的值对象。我在这个例子中使用了 User,因为它很容易理解。
java - 是否可以将 org.immutable:value 的构建器与 hibernate 的 @Entity 结合起来?
我真的很喜欢 immutables.github.io 的 immutables:value 注释处理器(@Value.Immutable
, @Value.Modifiable
, 等)。我有一个使用 hibernate 的项目,其中有很多实体。我很乐意让不可变库为我生成构建器。有没有人有幸实现这一目标?
说我有一个实体
有几种通用的方法似乎很明智:
- 不知何故告诉
@Value.Modifiable
将注释应用于具体ModifiableEntity
类型而不是即将成为抽象Entity
类。 - 告诉 hibernate 使用不同的具体类(有点类似于
@JsonDeserialize(as=ModifiableEntity.class)
)。
但我不知道如何实现这两种方法。有谁知道一种可能有效的方法?