用@autovalue生成的类是不可变的吗?我可以用它来代替自己创建类并确保它可以被注解为@immutable吗?
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的设计者有很好的理由进行他们的设计,但是缺乏不变性是令人惊讶的。
1条答案
按热度按时间zlhcx6iw1#
autovalue被公布为“为Java7+生成的不可变值类”。但是如果您使用可变字段,autovalue类不是@immutable,也就是说,不遵循注解javadoc中定义的约定。这一点在autovalue文档中已经明确指出。
此外,如果在autovalue类中声明一个属性,该类是一个集合,如
结果字段不一定是不变的,它取决于传递给构造函数的map实现。对于不变性,您希望改用类似于immutablemap的方法,这将强制您在构造函数中传入一个immutablemap:
在我看来,生成的autovalue代码确实可以自动使这样的集合属性不可变。
我想@autovalue的设计者有很好的理由进行他们的设计,但是缺乏不变性是令人惊讶的。