微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我需要@AutoValue 类中的不可变集合吗?

@Autovalue 生成的类是不可变的吗?我可以使用它而不是自己创建类并确保它可以被@Immutable 注释吗?

解决方法

AutoValue 被宣传为“为 Java 7+ 生成的不可变值类”。但是如果使用可变字段,AutoValue类就不是@Immutable,即不遵循annotation javadoc中定义的契约。 Autovalue docs 中明确指出了这一点。

此外,如果您在 AutoValue 类中声明一个集合属性,例如

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

结果字段不一定是不可变的,这取决于您传递给构造函数的 Map 的实现。对于不变性,您想改用 ImmutableMap 之类的东西,这会强制您在构造函数中传入 ImmutableMap:

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

在我看来,生成的 AutoValue 代码确实可以自动使集合属性像这样不可变。

我想@AutoValue 设计者的设计有很好的理由,但缺乏不变性令人惊讶。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。