第九十八节 Java面向对象设计 - Java不可变对象

server/2024/11/15 6:17:20/

Java面向对象设计 - Java不可变对象

在创建状态后无法更改其状态的对象称为不可变对象。

一个对象不可变的类称为不可变类。

不变的对象可以由程序的不同区域共享而不用担心其状态改变。

不可变对象本质上是线程安全的。

例子

以下代码创建了不可变类的示例。

public  class  IntWrapper {private  final  int  value;public IntWrapper(int value) {this.value = value;}public int  getValue() {return value;}
}

注意

这是如何创建IntWrapper类的对象:

IntWrapper wrapper  = new IntWrapper(101);

在这一点上,包装器对象保持101,并且没有办法改变它。

因此,IntWrapper类是一个不可变的类,它的对象是不可变的对象。

最好将所有实例变量声明为final,这样Java编译器将在编译期间强制实现不可变性。


http://www.ppmy.cn/server/48002.html

相关文章

解决Mac无法上网/网络异常的方法,重置网络

解放方法 1、前往文件夹:/Library/Preferences/SystemConfiguration 2 、在弹窗中输入上边的地址 3 、把文件夹中除了下图未选中的文件全部删掉,删除时需要输入密码 4 、重启mac 电脑就搞定了。

代码质量与可维护性提升

代码质量和可维护性的提升是一个持续的过程,需要在开发过程中采取一系列的措施。下面是一些可以提高代码质量和可维护性的方法: 使用清晰的命名:使用有意义且易于理解的变量名、函数名和类名。这样可以增加代码的可读性和可理解性。 遵循编码…

OpenCV如何判断一张图片是否有过高的明暗变化

操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 前言 判断一张图片是否有过高的明暗变化,可以通过分析图像的亮度分布一致性来实现。一种常见的做法是计算图像的亮度标准差(Standard …

【PL理论】(5) F#:递归类型 | Immutability 特性(F#中值一旦定义就不会改变)

💭 写在前面:本文旨在探讨不可变数据结构在 F# 编程中的应用,特别是如何利用递归记录类型来表示和操作数值表达式。通过定义存储整数的二叉树和数值表达式的类型,我们将展示不可变性如何简化程序的理解和维护。文章将对比 F# 与命…

深度学习 - 张量的广播机制和复杂运算

张量的广播机制(Broadcasting)是一种处理不同形状张量进行数学运算的方式。通过广播机制,PyTorch可以自动扩展较小的张量,使其与较大的张量形状兼容,从而进行元素级的运算。广播机制遵循以下规则: 如果张量…

Vue Router 使用教程

Vue Router 是 Vue.js 的官方路由管理器,它提供了一种方便的方式来管理应用的路由。在本教程中,我们将介绍 Vue Router 的一些常见用法和示例。 一、安装 Vue Router 使用 Vue Router 之前,需要先安装它。可以使用以下命令通过 npm 安装&am…

kubesz(一键安装k8s)

引言 Kubernetes(K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。kubeasz 是一个用于快速搭建 Kubernetes 高可用集群的项目,它基于 Ansible,通过提供一套简单、易用的配置,使得…

React中使用 ts 后,craco库配置别名时需要注意什么?

文章目录 前言编译报错如下解决方式总结 前言 我们都知道craco库可以用来覆盖react配置,如设置别名等。但是在项目使用 Typescript 后,我们需要额外配置,否则会造成编译报错。 详细craco配置可以查看之前文章: 项目初始化与配置…