如何创建一个不可变类

  1. 将类声明为final,所以它不能被继承
  2. 将所有的成员声明为私有的,这样就不允许直接访问这些成员
  3. 对变量不要提供setter方法
  4. 将所有可变的成员声明为final,这样只能对它们赋值一次
  5. 通过构造器初始化所有成员,进行深拷贝(deep copy)
  6. 在getter方法中,不要直接返回对象本身,而是克隆对象,并返回对象的拷贝

原文地址:https://www.cnblogs.com/ldddd/p/11213326.html

时间: 2024-10-09 11:47:56

如何创建一个不可变类的相关文章

创建一个单例类

关于单例的概念此处不做表述,直接上代码演示如何创建一个单例类. 1 #import <Foundation/Foundation.h> 2 3 @interface MJDemo : NSObject 4 5 + (instancetype)sharedDemo; 6 7 @end 8 9 10 #import "MJDemo.h" 11 12 @implementation MJDemo 13 14 //在iOS中所有对象分配内存空间,最终都会调用allocWithZon

【iOS开展-50】使用它来创建一个新的类的实现代码包,因此,不自觉地练习简单MVC实验,附带动画

接下来说说代码封装最后一个个案. 最后一种情况看:[iOS开展-48]九宫格案例:自己主动布局.字典转模型运用.id和instancetype差别.xib反复视图运用及与nib关系 (1)代码封装的原则是:要保证视图控制器尽量少的接触到其它对象的属性,也就是说,尽量把数据或者属性封装到一个类里面,然后利用类或者对象的方法来调用或者设置数据.而是赤裸裸地把属性都写在视图控制器中. 核心作用在于:降低视图控制器的代码量,把数据和属性的处理封装起来,这样也便于其它视图控制器的使用. 要做到的结果就是例

创建一个动作-Action类:

让我们创建一个Java文件HelloWorldAction.java的Java资源> SRC下一个的包名com.yiibai.struts2与下面的内容. package com.yiibai.struts2; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport{ private String name; public String execute()

教你如何用C++创建一个特殊的类

就语言而言,个人还是比较喜欢C++,尽管 C++有些语法方面确实比较深奥,但这些确实挡不住它在实际应用中不可被替代的位置. 开始谈今天的重点,如何定义一个特殊的C++类. 1.定义不可被继承的C++类 如何让一个类不能被继承呢?简单来说,我们希望达到的效果,就是如果继承这个类的话,编译直接报错. 实现这个类,我希望你提前了解过以下几个C++的简单语法:友元类.虚继承.这里我直接告诉你如何来定义,接下来我们讨论为什么. 第一步:定义一个空类A,显式给出构造和析构,构造和析构必须定义为private

可变类与不可变类的区别

可变类与不可变类的区别 所谓不可变类: 是指当创建了这个类的实例后,就不允许修改它的属性值.在JDK的基本类库中,所有基本类型的包装类,如Integer和Long类,都是不可变类,java.lang.String也是不可变类. 不可变类: 当你获得这个类的一个实例引用时,你不可以改变这个实例的内容.不可变类的实例一但创建,其内在成员变量的值就不能被修改. 如何创建一个不可变类? 这道题90%以上的人都会被挂或者只回答一半对,来看: 1. 所有成员都是private 2. 不提供对成员的改变方法,

UE4的编程C++创建一个FPSproject(两)角色网格、动画、HUD、子弹类

立即归还,本文将总结所有这些整理UE4有关角色的网络格.动画.子弹类HUD一个简单的实现. (五)角色加入网格 Character类为我们默认创建了一个SkeletaMeshComponent组件,所以我们只须要做的就是使用哪一个静态网格模型.接下来我们为我们的FPSCharacter类创建一个蓝图,这样我们能够简单的把资源指定给静态网格模型这里,而且方便以后操作加入的组件. 作为開始,我们首先要导入一个第三人称的静态网格模型.最后我们设置成两个网格,一个是我们自己看的,另外一个是其它人看到的.

不可变类

所谓不可变类,是指当创建了这个类的实例后,就不允许修改它的属性值. 在C#中,String类就是一个不可变类.这也就是为什么当我们创建一个String对象后为其再次赋值后创建的是另一个实例的原因. 下面例举一个例子. static void Main(string[] args) { string str1 = "I'm a student"; string str2 = str1; str2 = "I'm a teacher"; Console.WriteLine

Java中的不可变类

本文与个人博客 zhiheng.me 同步发布,标题: Java中的不可变类. 不可变类(Immutable Objects):当类的实例一经创建,其内容便不可改变,即无法修改其成员变量. 可变类(Mutable Objects):类的实例创建后,可以修改其内容. Java 中八个基本类型的包装类和 String 类都属于不可变类,而其他的大多数类都属于可变类. 与引用不可变的区别 需要特别注意的是,不可变类的不可变是指该类的实例不可变而非指向该实例的引用的不可变. String s = "ab

无锁编程:采用不可变类减少锁的使用

很多的同学很少使用.或者干脆不了解不可变类(Immutable Class).直观上很容易认为Immutable类效率不高,或者难以理解他的使用场景.其实不可变类是非常有用的,可以提高并行编程的效率和优化设计.让我们跳过一些宽泛的介绍,从一个常见的并行编程场景说起: 假设系统需要实时地处理大量的订单,这些订单的处理依赖于用户的配置,例如用户的会员级别.支付方式等.程序需要通过这些配置的参数来计算订单的价格.而用户配置同时被另外一些线程更新.显然,我们在订单计算的过程中保持配置的一致性. 上面的例