我有以下查询,我正在研究Java不可变类的概念,并得出以下分析。。
现在我有下面的课…
public final class Bill {
private final int amount;
private final DateTime dateTime;
private final List<Integers> orders;
}
请告知如何将其设置为不可变类。
由于amount是值类型,datetime是不可修改的,如果您在其getter中返回orders属性的Collections.unmodifiable()版本,该类将变成不可修改的。
由于int
是一个原语并且DataTime
(我猜来自JodaTime)是不可变的,因此您唯一需要做的就是确保使用不可变列表:
public final class Bill {
...
public Bill(int amount, DateTime dateTime, List<Integer> orders) {
this.amount = amount;
this.dateTime = dateTime;
this.orders = Collections.unmodifiableList(orders);
}
...
}
显然,您还需要一个构造函数来初始化final
字段以及访问这些字段的一些方法。
您的类是不可变的。现在您可能想要添加一些方法:
public final class Bill {
private final int amount;
private final DateTime dateTime;
private final List<Integers> orders;
public Bill(int amount, DateTime dateTime, List<Integer> orders) {
this.amount = amount; //primitive type: ok
this.dateTime = dateTime; //joda.DateTime is immutable: ok
this.orders = new ArrayList<Integer> (orders); //make a copy as the caller could modify the list at its end
}
// no method that adds or removes from the list
public List<Integer> getOrders() {
return Collections.unmodifiableList(orders); //defensive copy
}
}
或者,可以使用< code > this . orders = collections . unmodifieblelist(orders);并从getOrders()返回它:< code >返回订单;,它强制您不应该修改该列表,即使在您的类中也是如此。
问题内容: 当我们使用数组从数组创建列表时,该列表是不可变的。我只是想知道为什么当(或)的基本目的是具有动态大小并能够随意添加和删除元素时,为什么要创建一个不可变列表。当我们需要固定大小的数据结构时,我们选择数组;当我们需要动态数据结构时,我们选择或或等等。那么拥有不可变列表的目的是什么?我在做作业时遇到了这个问题。 问题答案: 当我们使用java.util.Arrays.asList()从数组创
问题内容: 关于id类型对象str(在python 2.7中)的某些事情使我感到困惑。该str类型是不可变的,因此我希望一旦创建它,它将始终具有相同的id。我相信我说的话不太好,所以我将发布一个输入和输出序列的示例。 因此与此同时,它一直在变化。但是,在有一个指向该字符串的变量之后,情况发生了变化: 因此,一旦变量保存了该值,它似乎就冻结了。确实,在和之后o, 的输出再次更改。 这是不相同的行
问题内容: 您能否澄清一下,为什么在我们将 final 关键字设为不变时,为什么 在上课之前需要 final 关键字。我的意思是,如果我们将所有属性声明为私有和最终的,那么它也是一个不可变的类,不是吗? 很抱歉,这个问题似乎很简单,但是我对此感到非常困惑。帮帮我。 编辑:我知道一个声明为final的类不能被子类化。但是如果每个属性都是私有和final的,那有什么区别呢? 问题答案: 正如堆纸器所说
问题内容: 我找到了一篇有趣的代码文章: 我真的很好奇了解创建此类的优势。我知道这里的此类对象是不可变的,因为一旦初始化就无法更改其变量值。我以前从未做过这样的事情,而且我真的不了解它的优势。 为什么是个好习惯? 您能说出可以使用这种方法的情况吗? 常量或只读变量呢?那不是很相似吗? 在文章中说,这不利于应用程序的性能。 但是为什么 呢? 问题答案: 您提到的示例是不可变对象。它在编程语言中被广泛
问题内容: 我对什么是不可变类型感到困惑。我知道该float对象被认为是不可变的,在我的书中有这样的例子: 由于类的结构/层次结构,这是否被认为是不可变的?意思float是在类的顶部,是它自己的方法调用。类似于此类示例(即使我的书说的dict是可变的): 可变的东西在类内部具有方法,例如以下类型: 另外,对于最后一个,如果我将这种类型的set传递给它: 不调用该example方法,它返回一个字典。
本文向大家介绍python不可变变量?相关面试题,主要包含被问及python不可变变量?时的应答技巧和注意事项,需要的朋友参考一下 不可变对象是指不可以被引用改变的对象,如字符串 #