当前位置:  开发笔记 > 编程语言 > 正文

Java中的不可变bean

如何解决《Java中的不可变bean》经验,为你挑选了0个好方法。

我非常好奇为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显然有大量的样板.

我很想听听其他人对这个问题的看法.(我抱歉没有提供一个好的问题,可以回答而不是讨论:)

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有