首页 > 解决方案 > 如何用 Lombok Date And Collections 定义不可变?

问题描述

我对 lombok 进退两难,知道这个工具的人都知道声明 getter 和 setter 很容易,但是当涉及到 Dates 和 Collections 时,我们如何才能声明它们不可变呢?

Thx 和亲切的问候!

标签: javaimmutabilitylombok

解决方案


Lombok 提供了@Wither,它允许以某种方式简化不可变对象的创建。但是,它不包括您提到的情况。

您必须自己管理对象的不变性,并在所有其他情况下使用 Lombok。

此外,这是一个如何ImmutableObject使用Dateand实现的示例Collection

public final class ImmutableObject {
    private final Collection<String> collection;
    private final Date date;

    public ImmutableObject(final Collection<String> options, final Date createdAt) {
        this.collection = ImmutableList.copyOf(options); // guava's immutable list
        this.date = new Date(date); // must be copied to prevent caller from modifying it
    }

    public Date getDate() {
        return new Date(date); // Date is mutable
    }

    public Collection<String> getCollection() {
        return collection; // already immutable copy
    }
}

推荐阅读