什么是不可变对象?(an immutable object?)

在面向对象编程中,不可变对象是一个在创建后其属性不能更改的对象。相比之下,大多数对象都是可变对象,这意味着它们的部分或全部属性可以在创建后自由更改。各种计算机语言都有能力创建不可变对象,包括java、C++、Erlang、Tcl和Scala。...

在面向对象编程中,不可变对象是一个在创建后其属性不能更改的对象。相比之下,大多数对象都是可变对象,这意味着它们的部分或全部属性可以在创建后自由更改。各种计算机语言都有能力创建不可变对象,包括java、C++、Erlang、Tcl和Scala。

In computer programming, an immutable object is an object whose properties cannot be changed after it has been created.

不可变对象可以通过以下两种方式之一创建:通过创建定义为不可变的类,或者通过显式地将其他可变对象声明为不可变的。创建不可变类的方法因所使用的计算机语言而异。不管使用哪种语言,一个不可变的类必须没有可以更改其内部数据的方法,也不能有方法可以更改,即。重写或重载-以更改其内部数据的方式。这是两种方法中比较复杂的一种。另一方面,要从其他可变对象创建不可变对象,通常可以应用关键字将该对象指定为不可变。

例如,Java中不可变对象的创建在很大程度上依赖于“final”关键字。使类在Java中不可变的一种快速方法是将类及其所有方法和数据成员声明为final。类似的策略也可以用C++中的“const”关键字来使用。但是,这些方法可能不是最好的,具体取决于类的内容。通常,通过仔细维护对象的内部数据,可以使对象保持不变。

在上面的例子中,使用关键字创建一个不可变的对象通常比将整个类编写为不可变的要容易得多。然而,使用这种方法也有其危险性。当以这种方式显式指定一个不可变对象时,程序员必须首先确保所有适当的属性和数据都已合并到该对象中。依赖一个不完整的对象可能是危险的,特别是当它缺少一条重要的信息时。

如果对象是可变的,但需要正确创建不可变数据,则必须先初始化不可变数据,然后才能创建可变对象。不可变对象始终是不可变的,无论它们是数据值还是大型对象,并且必须始终如此对待。通常,不可变对象在创建后不能变为可变对象,尽管它们有时可能被复制为可变对象。通常可以假定不可变对象及其任何副本也是不可变的,这可以防止数据或内存问题。

  • 发表于 2021-12-11 14:03
  • 阅读 ( 112 )
  • 分类:互联网

你可能感兴趣的文章

对象(object)和补足(complement)的区别

...宾语也可以是补语的一部分。 目录 1. 概述和主要区别 2. 什么是对象 3. 什么是补码 4. 宾语与补语的关系 5. 并列比较-表格形式的对象与补足 6. 摘要 什么是一个物体(an object)? 宾语是动词后面的名词或名词短语。它通常指动词所...

  • 发布于 2020-10-21 21:19
  • 阅读 ( 514 )

直接对象(direct objects)和间接宾语(indirect objects)的区别

...间接宾语的区别。让我们先了解一下每个学期的情况。 什么是直接宾语(a direct object)? 直接宾语总是由动词的动作支配,并接受动词的动作。直接宾语是名词或代词。直接目标很容易识别。你只需找到句子的主语和动词,然后...

  • 发布于 2020-10-27 22:54
  • 阅读 ( 713 )

数组(array)和一串(string)的区别

...式非常不同。本文介绍数组和字符串之间的无偏比较。 什么是数组(an array)? 许多应用程序都涉及大量数据,要处理如此大量的数据,我们需要一种强大的数据类型,以方便高效地存储和访问数据项。这就是数组出现的地方。...

  • 发布于 2021-06-25 10:17
  • 阅读 ( 1403 )

直接的(direct)和间接客体(indirect object)的区别

...本文中,我们将研究直接宾语和间接宾语之间的区别。 什么是直接的物体(a direct object)? 直接宾语是接受动词动作或表示动作结果的名词、代词或名词短语。它在动作动词后面回答“什么”或“谁”的问题。如果你能在一个句...

  • 发布于 2021-06-27 05:34
  • 阅读 ( 662 )

上升(rise)和提升(raise)的区别

...上移动。然而,上升和上升在用法上有明显的区别。Rise是不及物动词,而raise是及物动词。因此,raise总是与直接对象一起使用,而raise不是。这可以定义为上升和上升之间的主要区别。让我们在本文中看到这两个术语之间的进...

  • 发布于 2021-06-27 10:13
  • 阅读 ( 294 )

主题(subject)和对象(object)的区别

...句子中动作的接受者。这可以说是主客体的主要区别。 什么是主题(a subject)? 主语是句子中最重要的成分之一。句子的主语是指做动作或被描述的人或事。例如, 尼娜去上学了。 尼娜很漂亮。 在这两句话中,尼娜是主动词的...

  • 发布于 2021-06-27 11:10
  • 阅读 ( 841 )

什么是客观补语的功能(the function of an objective complement)

在解释宾语补语的功能之前, 1.什么是宾语补语 –定义 作为宾语补语的名词 –形容词作为宾语补语,然后描述 2.宾语补语的功能,表示 3.寻找宾语补语的练习。 什么是客观补语(an objective complement)? 定义 宾语补语,又...

  • 发布于 2021-06-28 07:03
  • 阅读 ( 397 )

对象(object)和英语语法补语(complement in english grammar)的区别

...多数语言使用者对这些词感到困惑。 覆盖的关键领域 1.什么是英语语法中的宾语-定义,特征,例子2.什么是英语语法中的补语-定义,特征,例3.英语语法中宾语和补语的关系是什么-联想大纲4.英语语法中宾语和补语的区别是什...

  • 发布于 2021-06-30 20:04
  • 阅读 ( 520 )

对象文件(object file)和可执行文件(executable file)的区别

...执行文件是与C编程相关的两个文件。 覆盖的关键领域 1.什么是目标文件-定义,功能2.什么是可执行文件-定义,功能3.目标文件和可执行文件之间的关系是什么-关联概要4.目标文件和可执行文件之间的区别是什么-关键区别的比较...

  • 发布于 2021-07-01 03:58
  • 阅读 ( 893 )

函数式程序设计(functional programming)和面向对象程序设计(object oriented programming)的区别

...根据编程语言的特性对其进行分类。 覆盖的关键领域 1.什么是函数式编程–定义,功能2.什么是面向对象编程–定义,功能3.函数式编程和面向对象编程的区别–关键区别的比较 关键术语 抽象、封装、函数式编程、继承、面向...

  • 发布于 2021-07-01 17:38
  • 阅读 ( 911 )
焉花碎丶倾城美
焉花碎丶倾城美

0 篇文章

相关推荐