Java 如何定义Lombok日期和集合不可变?

Java 如何定义Lombok日期和集合不可变?,java,immutability,lombok,Java,Immutability,Lombok,我对lombok感到进退两难,知道这个工具的人都知道声明getter和setter非常容易,但是当涉及到日期和集合时,我们如何才能声明它们是不可变的呢 谢谢&亲切的问候 Lombok提供了一种简化不可变对象创建的方法。但是,它不包括您提到的案例 您必须自己管理对象的不变性,并在所有其他情况下使用Lombok 另外,这是一个如何使用Date和Collection实现ImmutableObject的示例: public final class ImmutableObject { privat

我对lombok感到进退两难,知道这个工具的人都知道声明getter和setter非常容易,但是当涉及到日期和集合时,我们如何才能声明它们是不可变的呢

谢谢&亲切的问候

Lombok提供了一种简化不可变对象创建的方法。但是,它不包括您提到的案例

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

另外,这是一个如何使用
Date
Collection
实现
ImmutableObject
的示例:

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
    }
}
公共最终类不可变对象{
私人最终收藏;
私人最终日期;
公共ImmutableObject(最终集合选项、最终创建日期){
this.collection=ImmutableList.copyOf(选项);//番石榴的不可变列表
this.date=new date(date);//必须复制以防止调用方修改它
}
公共日期getDate(){
返回新日期(日期);//日期是可变的
}
公共集合getCollection(){
return集合;//已经是不可变副本
}
}
Lombok提供了一种简化不可变对象创建的方法。但是,它不包括您提到的案例

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

另外,这是一个如何使用
Date
Collection
实现
ImmutableObject
的示例:

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
    }
}
公共最终类不可变对象{
私人最终收藏;
私人最终日期;
公共ImmutableObject(最终集合选项、最终创建日期){
this.collection=ImmutableList.copyOf(选项);//番石榴的不可变列表
this.date=new date(date);//必须复制以防止调用方修改它
}
公共日期getDate(){
返回新日期(日期);//日期是可变的
}
公共集合getCollection(){
return集合;//已经是不可变副本
}
}

不清楚你在问什么。可以像对其他类型声明getter和setter一样简单地声明日期和集合的getter和setter,但不能自定义getter/setter或任何其他自动生成的代码。“使集合不可变”太宽泛,需要一些关于结构的知识。Lombok如何知道您喜欢哪种不可变?如何使您的集合类不可变
MySuperArrayList
?不清楚您在问什么。可以像对其他类型声明getter和setter一样简单地声明日期和集合的getter和setter,但不能自定义getter/setter或任何其他自动生成的代码。“使集合不可变”太宽泛,需要一些关于结构的知识。Lombok如何知道您喜欢哪种不可变?如何使你的集合类不可变
MySuperArrayList
?嗨,@Wither是实验性的,因为我没有使用它。谢谢you@Matheus
@Wither
是实验性的,我从一开始就使用它。我很确定,它不会消失,也不会以一种不兼容的方式被改变。我也很确定,没有这样的提议——永远不会
++
然而,我强烈建议放弃过时的
日期
,转而使用
java.time.*
类,这些类是不可变的,在许多方面都要好得多。非常感谢@maaartinus的回复,但我决定从我的项目中删除lombok,原因有几个。我更喜欢完全控制我的对象@马修斯你的选择让我伤心,但这是你的选择。我真的无法想象在没有Lombok的情况下使用Java,因为它节省了这么多样板文件。使用德隆博克,我可以看到这是因子1.4,这真的很多。嗨,@Wither是实验性的,我没有使用它。谢谢you@Matheus
@Wither
是实验性的,我从一开始就使用它。我很确定,它不会消失,也不会以一种不兼容的方式被改变。我也很确定,没有这样的提议——永远不会
++
然而,我强烈建议放弃过时的
日期
,转而使用
java.time.*
类,这些类是不可变的,在许多方面都要好得多。非常感谢@maaartinus的回复,但我决定从我的项目中删除lombok,原因有几个。我更喜欢完全控制我的对象@马修斯你的选择让我伤心,但这是你的选择。我真的无法想象在没有Lombok的情况下使用Java,因为它节省了这么多样板文件。使用delombok,我可以看到大约是因子1.4,这真的很多。