构造函数和复制函数java

Copy Constructor in java class is a special type of constructor that takes same class as argument. Copy constructor is used to provide a copy of the specified object.

java类中的Copy构造函数是一种特殊的构造函数类型,它使用相同的类作为参数。 复制构造函数用于提供指定对象的副本。

用Java复制构造函数 (Copy Constructor in Java)

Copy constructor is an easy alternative to java cloning mechanism.

复制构造函数是Java克隆机制的简单替代方案。

Copy constructor is helpful when we want to copy an object that is heavy to instantiate. While writing copy constructor it’s very important to perform deep copy so that both the objects are detached. However in some cases where you don’t mind the change in object data, then you can also go for shallow copy.

当我们要复制要实例化的对象时,复制构造函数很有用。 在编写副本构造函数时,执行深度复制非常重要,这样两个对象都可以分离。 但是,在某些情况下,您不介意对象数据的更改,那么您也可以进行浅表复制。

Let’s see how to properly write a copy constructor in java and perform deep copy of the object.

让我们看看如何在Java中正确编写一个复制构造函数并执行对象的深层复制。

package com.journaldev.copyconstructor;import java.util.ArrayList;
import java.util.List;import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;@Data
@NoArgsConstructor
@ToString
public class State {private List<String> cities;private String name;private String country;public State(State st) {this.name = st.name; //string is immutable, so we can do direct assignmentthis.country = st.country;List<String> ct = new ArrayList<>();for (String c : st.cities) {ct.add(c);}this.cities = ct;}
}

Note that I am using project lombok so that I don’t have to write boiler-plate code.

请注意,我使用的是lombok项目,因此不必编写样板代码。

Here is a simple test class where we are using copy constructor.

这是一个使用复制构造函数的简单测试类。

package com.journaldev.copyconstructor;import java.util.ArrayList;
import java.util.List;public class StateTest {public static void main(String[] args) {State state = getState();State stateCopy = new State(state);System.out.println("State = "+state);System.out.println("StateCopy = "+stateCopy);stateCopy.getCities().add("Cupertino");stateCopy.setCountry("United States of America");System.out.println("State = "+state);System.out.println("StateCopy = "+stateCopy);}private static State getState() {//in real life, it will do some DB call or expensive API//class to fetch the dataState state = new State();state.setName("California");state.setCountry("USA");List<String> cities = new ArrayList<>();cities.add("San Jose"); cities.add("San Francisco");state.setCities(cities);return state;}}

Notice that I am changing some properties in one of the object, if our deep copy implementation is correctly done then it shouldn’t affect the other object. Let’s run the above program and check the output.

请注意,我正在更改一个对象中的某些属性,如果我们的深层复制实现正确完成,那么它不会影响另一个对象。 让我们运行上面的程序并检查输出。

State = State(cities=[San Jose, San Francisco], name=California, country=USA)
StateCopy = State(cities=[San Jose, San Francisco], name=California, country=USA)State = State(cities=[San Jose, San Francisco], name=California, country=USA)
StateCopy = State(cities=[San Jose, San Francisco, Cupertino], name=California, country=United States of America)

It’s clear from the output that our copy constructor implementation is correct, change in one of the object didn’t affected the other object and our deep copy implementation is correct.

从输出中很明显,我们的复制构造函数实现是正确的,其中一个对象的更改未影响另一个对象,而我们的深层复制实现是正确的。

翻译自: https://www.journaldev.com/21078/copy-constructor-in-java

构造函数和复制函数java

构造函数和复制函数java_用Java复制构造函数相关推荐

  1. java静态构造函数_为什么不允许使用Java静态构造函数?

    java静态构造函数 Java Static Constructor is not allowed, but why? Before we dig into the reasons for not a ...

  2. 构造函数和复制函数java_什么是Java构造函数?

    构造函数和复制函数java 在开放源代码,跨平台编程中,Java是(无可争议的)重量级人物. 尽管有许多很棒的 跨平台 框架 ,但很少有像Java这样统一和直接的框架 . 当然,Java还是一种非常复 ...

  3. lambda函数 java_使用 Java 构建 Lambda 函数 - AWS Lambda

    本文属于机器翻译版本.若本译文内容与英语原文存在差异,则一律以英文原文为准. 使用 Java 构建 Lambda 函数 您可以在 AWS Lambda 中运行 Java 代码.Lambda 为运行代码 ...

  4. gettime 函数 java_关于java:如何使date.getTime()返回UTC时间?

    我有一个Date对象,它代表一个UTC时间. 当我使用getTime()方法获取此对象的长整型值时,返回的值对应于我们的当地时间(美国中部). 取回与原始UTC时间相对应的值的正确方法是什么? 谢谢 ...

  5. java反射构造函数_【译】3. Java反射——构造函数

    ==================================================================================================== ...

  6. [一道搜狗输入法的面试题]C++转换构造函数和类型转换函数

    今天面试遇到一道有关C++转换构造函数的题目,之前经常见到默认构造函数.拷贝构造函数.析构函数,但是从没听说过转换构造函数,隐式转换函数也是一样,C++的确是够博大精深的,学习之路很长啊! 其实我们已 ...

  7. js 中的构造函数,构造函数作用,构造函数和普通函数的区别

    函数的定义方式: 1.声明式函数定义: function 函数名 (){}:这种定义方式,会将函数声明提升到该函数所在作用域的最开头,也是就无论你在这个函数的最小作用域的那儿使用这种方式声明的函数,在 ...

  8. java复制的函数会报错,2 面试题之面向对象

    大纲: 一.两个重要概念 ① 请说明类和对象的区别 类是对某一类实物的描述,是抽象的:对象是一个实实在在的个体,是类的一个实例: ② 解释一下什么是类加载机制.双亲委派模型,好处是什么? 类加载机制: ...

  9. 复制构造函数 与 赋值函数 的区别

    构造函数.析构函数.赋值函数是每个类最基本的的函数.每个类只有一个析构函数和一个赋值函数.但是有很多构造函数(一个为复制构造函数,其他为普通构造函数.对于一个类A,如果不编写上述四个函数,c++编译器 ...

最新文章

  1. Keras构建前馈神经网络并使用callbacks输出acc以及loss曲线(训练接、验证集)及效果可视化
  2. Linq To select
  3. web项目启动时 初始化加载系统参数 获取无法自动注入的服务
  4. python excel处理框架_django框架基于模板 生成 excel(xls) 文件操作示例
  5. 机器学习中的lazy method与eager method的比较
  6. 运行错误:Application Error - The connection to the server was unsuccessful
  7. Oracle中限定日期,Oracle 日期的一些简单使用
  8. 浅谈MySQL的七种锁
  9. 实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)
  10. Kalman Filter : 理解卡尔曼滤波的三重境界
  11. xfce4桌面连接蓝牙设备ubuntu
  12. idea时间重置插件
  13. Vim插件合集 (打造你的专属炫酷IDE)
  14. 味美多网址导航php,味多美网址导航源码程序按来路自动显示 2010.0329
  15. OSChina 端午节乱弹 ——用魔兽世界来祭奠青春
  16. 重装系统后usb失效如何处理
  17. Git出现 fatal: Authentication failed for 'http://xxx.xxx.xx:xxx.git/'解决方法
  18. google 搜索十大搜索技巧和实用小技巧
  19. 如何用uni-app做一个领优惠券H5、小程序商城(一)
  20. html如何制作正方体手工图,立体图形手工模型(怎样用卡纸制作正方体、长方体)...

热门文章

  1. Perl 学习笔记-输入输出
  2. Go语言中的字符和字符串
  3. inner/left/right inner
  4. java项目连接Oracle配置文件
  5. scala学习--难点
  6. 闭关修炼——six——Spring
  7. 归纳下js面向对象的几种常见写法
  8. 1003. Parity(并查集)
  9. SQL按字段分组取最大(小)值记录(重复记录)
  10. 图像处理之---双线性插值