Effective Java 英文 第二版 读书笔记 Item 11:Override clone judiciously

x.clone()!=x will be true

x.clone().getClass()==x.getClass() will be true

x.clone().equals(x) always true.

意味着深复制,新建对象,数据与结构与原对象一致,

Copying an object will typically entail creating a new instance of tis class,but it may require copying of internal data structures as well.

if you override the clone method in a nonfinal class,you should return an object obtained by invoking super.clone.

In  practice, a class that implements Cloneable is expected to provide a properly functioning public clone method.\

never make the client do anything the library can do for the client.

这样的类直接调用super.clone()后,会造成elements指向同一个数组对象

correct

In effect the clone method functions as another constructor;you must ensure that it does no harm to the original object and that

it properly established invariants on the clone.

the clone architecture is incompatible with normal use of final fields referring to mutable objects,

问题出在clone之后的next引用的是原来数据的next entry,做法就是我们需要更新copy的时候把新数据的next也传入来赋值一下

Though the clone has its own bucket array ,thsi array references the same linked lists as the original,

which can easily cause nondeterministic behavior in both the clone and the original.

A fine approach to object copying is to provide a copy constructor or copyfactory.

A copy constructor is simply a constructor that takes a single argument whose type is the class containing the constructor

for example,
    public Yum(Yum yum);
A copy factory is the static factory analog of a copy constructor:
    public static Yum newInstance(Yum yum);

时间: 2024-09-29 09:04:28

Effective Java 英文 第二版 读书笔记 Item 11:Override clone judiciously的相关文章

Effective Java 英文 第二版 读书笔记 Item 7:Avoid finalizers

Finalizers are unpredictable,often dangerous,and generally unnecessary. Their use can cause erratic behavior,poor performance,and portability problems. Finalizers have a few valid uses,which we’ll cover later in this item,but as a rule of thumb,you s

Effective Java 英文 第二版 读书笔记 Item 5:Avoid creating unnecessary objects.

It is often appropriate to reuse a single object instead of creating a new functionally equivalent object each time it is needed.Reuse can be both faster and more stylish.An object can always be reused if it is immutable. String s=new String(“no”); 

Effective Java 英文 第二版 读书笔记 Item 3:Enforce the singleton property with a private constructor or an enum type.

Making a class a singleton can make it difficult to test clients. package singletonProperty; //ingleton with public final field public class ElvisField { public static final ElvisField INSTANCE=new ElvisField(); private ElvisField(){ } } package sing

Effective Java 英文 第二版 读书笔记 Item 2:Consider a builder when faced with many constructor parameters.

package builderManyPara; //JavaBeans Pattern - allows inconsistency,mandates mutability public class NutritionFactsBean { // Parameters initialized to default values(if any) // required private int servingSize = -1; private int servings = -1; // opti

Effective Java 英文 第二版 读书笔记 Item 10:Always override toString

for example,[email protected]  class [email protected]+unsigned hexadecimal representation of hashcode. define: a concise but informative representation that is easy for a person to read providing a good toString implementation makes your class much

Effective Java 英文 第二版 读书笔记 Item 4:Attempting to enforce noninstantiability by making a class abstract does not work.

The class can be subclassed and the subclass instantiated.Futhermore,it misleads the user into thinking the class was designed for inheritance(继承). There is,however,a simple idiom to ensure noninstantiability.A default constructor is generated only i

Effective Java 英文 第二版 读书笔记 Item 13:Minimize the accessibility of classes and members

访问修饰符的可见域 • private—The member is accessible only from the top-level class where it is declared.• package-private—The member is accessible from any class in the packagewhere it is declared. Technically known as default access, this is the access leve

实习第16天 开新坑 Effective Java 英文 第二版 读书笔记

最近每天上班下班有点时间看下 Effective Java. 我一般看看原文,在看看示例代码,再想想原文的意思. 我英文也不是很好,所以决定中文英文随便用. Creating and destroying objects Item 1: Consider static factory methods instead of constructors Advantage of static factory methods 1.Unlike constructors. They have names.

《Effective Java中文版第二版》读书笔记

说明 这里是阅读<Effective Java中文版第二版>的读书笔记,这里会记录一些个人感觉稍微有些重要的内容,方便以后查阅,可能会因为个人实力原因导致理解有误,若有发现欢迎指出.一些个人还不理解的会用斜线标注. 第一章是引言,所以跳过. 第二章 创建和销毁对象 第1条:考虑用静态工厂方法代替构造器 含义 静态工厂方法是指一个返回类的实例的静态方法,例如: public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE :