java - 如何使以下类不可变?

标签 java immutability date

我知道我需要使 Date 不可变。但是,我不确定还需要修改什么以确保该类是不可变的。 final 已为该类及其方法声明。

public final class Journal {
    private final Set<Article> edition;
    private final Date pubDate;

    public Journal(Article [] contents, Date d) {
        edition = new TreeSet<Article>();
        for(int i=0; i <contents.length; i++)
        edition.add(contents[i]);

        pubDate = d;
    }

    public Set<Article> getArticles() {
        return Collections.unmodifiableSortedSet(edition);
    }

    public Date getDate() { return pubDate; }
}   

最佳答案

不变性有几种。如果你想要标准的不变性,这意味着每个实例变量都是 final 并且没有 setter。如果你想要深度不变性,那么你的类必须是不可变的,但它的所有实例变量也必须是不可变的。或者,您可以让您的 getter 只返回实例变量的副本(确保它们永远不会在您的类中更改)。但是,这会带来不小的性能成本,并且会在以后造成技术债务。

关于java - 如何使以下类不可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61853855/

相关文章:

java - 未定义 getDeclaredField 方法

mysql - 合并具有单独日期范围的表而不重叠数据 - Access

java - 0001 年 1 月 1 日 Java 和 Javascript 之间的区别 UTC

javascript - 按日期值对 JSON 对象进行排序

java - Hibernate Spring 注解混淆

c# - 虚拟机如何执行指令?

java - 确保在 JUnit 测试中调用了所有 getter 方法

java - java中的不可变类

date - 如何使用 Java Date 对象使 Kotlin 中的数据类不可变?

c++ - 使用 const public 成员强制所有实例的不变性是否合理?