我非常好奇为java bean提供不变性的可能性(这里的bean我指的是带有空构造函数的类,为成员提供getter和setter).显然,这些类不是不可变的,并且它们用于从数据层传输值,这似乎是一个真正的问题.
StackOverflow中已经提到了一种解决这个问题的方法,称为"C#中的不可变对象模式",其中对象在完全构建后被冻结.我有另一种方法,并且非常希望听到人们对此的看法.
该模式涉及两个类Immutable和Mutable,其中Mutable和Immutable都实现了一个提供非变异bean方法的接口.
例如
public interface DateBean { public Date getDate(); public DateBean getImmutableInstance(); public DateBean getMutableInstance(); } public class ImmutableDate implements DateBean { private Date date; ImmutableDate(Date date) { this.date = new Date(date.getTime()); } public Date getDate() { return new Date(date.getTime()); } public DateBean getImmutableInstance() { return this; } public DateBean getMutableInstance() { MutableDate dateBean = new MutableDate(); dateBean.setDate(getDate()); return dateBean; } } public class MutableDate implements DateBean { private Date date; public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public DateBean getImmutableInstance() { return new ImmutableDate(this.date); } public DateBean getMutableInstance() { MutableDate dateBean = new MutableDate(); dateBean.setDate(getDate()); return dateBean; } }
这种方法允许使用反射(按照惯例)构造bean,并允许我们在最近的机会转换为不可变的变量.不幸的是,每个bean显然有大量的样板.
我很想听听其他人对这个问题的看法.(我抱歉没有提供一个好的问题,可以回答而不是讨论:)