我需要@autovalue类中的不可变集合吗?

f4t66c6m  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(292)

用@autovalue生成的类是不可变的吗?我可以用它来代替自己创建类并确保它可以被注解为@immutable吗?

zlhcx6iw

zlhcx6iw1#

autovalue被公布为“为Java7+生成的不可变值类”。但是如果您使用可变字段,autovalue类不是@immutable,也就是说,不遵循注解javadoc中定义的约定。这一点在autovalue文档中已经明确指出。
此外,如果在autovalue类中声明一个属性,该类是一个集合,如

public abstract Map<String, ImmutableThing> thingMap();

结果字段不一定是不变的,它取决于传递给构造函数的map实现。对于不变性,您希望改用类似于immutablemap的方法,这将强制您在构造函数中传入一个immutablemap:

public abstract ImmutableMap<String, ImmutableThing> thingMap();

在我看来,生成的autovalue代码确实可以自动使这样的集合属性不可变。
我想@autovalue的设计者有很好的理由进行他们的设计,但是缺乏不变性是令人惊讶的。

相关问题