Cloner (cloning 1.7.4 API)
Date: 2010-11-02

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## com.rits.cloning
Class Cloner

    java.lang.Object
      com.rits.cloning.Cloner

    public class Cloner

extends Object

Cloner: deep clone objects. This class is thread safe. One instance can be used by multiple threads on the same time.

Author:
  kostantinos.kougios 18 Sep 2008

Constructor Summary
`Cloner()`
`Cloner(org.objenesis.Objenesis objenesis)`

Method Summary
`protected
`<T> T`
` | `cloneInternal(T o, Map<Object,Object> clones)` PLEASE DONT CALL THIS METHOD The only reason for been public is because IFastCloner must invoke it
`
`<T,E extends T> void`
` | `copyPropertiesOfInheritedClass(T src, E dest)` copies all properties from src to dest.
`
`<T> T`
` | `deepClone(T o)` deep clones "o".
`void` | `dontClone(Class<?>... c)` instances of classes that shouldn't be cloned can be registered using this method.
`protected Object` | `fastClone(Object o, Map<Object,Object> clones)`
`
`<T> T`
` | `fastCloneOrNewInstance(Class<T> c)`
`boolean` | `isCloningEnabled()`
`boolean` | `isDumpClonedClasses()`
`boolean` | `isNullTransient()`
`
`<T> T`
` | `newInstance(Class<T> c)` creates a new instance of c.
`void` | `nullInsteadOfClone(Class<?>... c)` instead of cloning these classes will set the field to null
`void` | `registerConstant(Class<?> c, String privateFieldName)`
`void` | `registerConstant(Object o)`
`void` | `registerFastCloner(Class<?> c, IFastCloner fastCloner)`
`protected void` | `registerFastCloners()` registers a std set of fast cloners.
`void` | `registerImmutable(Class<?>... c)` registers an immutable class.
`protected void` | `registerKnownConstants()`
`protected void` | `registerKnownJdkImmutableClasses()` registers some known JDK immutable classes.
`void` | `registerStaticFields(Class<?>... classes)` registers all static fields of these classes.
`void` | `setCloningEnabled(boolean cloningEnabled)`
`void` | `setDumpClonedClasses(boolean dumpClonedClasses)` will println() all cloned classes.
`void` | `setExtraImmutables(Set<Class<?>> set)` spring framework friendly version of registerImmutable
`void` | `setExtraNullInsteadOfClone(Set<Class<?>> set)` spring framework friendly version of nullInsteadOfClone
`void` | `setExtraStaticFields(Set<Class<?>> set)` spring framework friendly version of registerStaticFields
`void` | `setNullTransient(boolean nullTransient)` this makes the cloner to set a transient field to null upon cloning.
`
`<T> T`
` | `shallowClone(T o)` shallow clones "o".

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### Cloner

    public Cloner()

### Cloner

    public Cloner(org.objenesis.Objenesis objenesis)

Method Detail

### isNullTransient

    public boolean isNullTransient()

### setNullTransient

    public void setNullTransient(boolean nullTransient)

  this makes the cloner to set a transient field to null upon cloning. NOTE: primitive types can't be nulled. Their value will be set to default, i.e. 0 for int

  Parameters:
    `nullTransient` - true for transient fields to be nulled

### registerFastCloners

    protected void registerFastCloners()

  registers a std set of fast cloners.

### fastClone

    protected Object fastClone(Object o,
                               Map<Object,Object> clones)
                        throws IllegalAccessException

  Throws:
    `IllegalAccessException`

### registerConstant

    public void registerConstant(Object o)

### registerConstant

    public void registerConstant(Class<?> c,
                                 String privateFieldName)

### registerKnownJdkImmutableClasses

    protected void registerKnownJdkImmutableClasses()

  registers some known JDK immutable classes. Override this to register your own list of jdk's immutable classes

### registerKnownConstants

    protected void registerKnownConstants()

### registerStaticFields

    public void registerStaticFields(Class<?>... classes)

  registers all static fields of these classes. Those static fields won't be cloned when an instance of the class is cloned. This is useful i.e. when a static field object is added into maps or sets. At that point, there is no way for the cloner to know that it was static except if it is registered.

  Parameters:
    `classes` - array of classes

### setExtraStaticFields

    public void setExtraStaticFields(Set<Class<?>> set)

  spring framework friendly version of registerStaticFields

  Parameters:
    `set` - a set of classes which will be scanned for static fields

### dontClone

    public void dontClone(Class<?>... c)

  instances of classes that shouldn't be cloned can be registered using this method.

  Parameters:
    `c` - The class that shouldn't be cloned. That is, whenever a deep clone for an object is created and c is encountered, the object instance of c will be added to the clone.

### nullInsteadOfClone

    public void nullInsteadOfClone(Class<?>... c)

  instead of cloning these classes will set the field to null

  Parameters:
    `c` - the classes to nullify during cloning

### setExtraNullInsteadOfClone

    public void setExtraNullInsteadOfClone(Set<Class<?>> set)

  spring framework friendly version of nullInsteadOfClone

### registerImmutable

    public void registerImmutable(Class<?>... c)

  registers an immutable class. Immutable classes are not cloned.

  Parameters:
    `c` - the immutable class

### setExtraImmutables

    public void setExtraImmutables(Set<Class<?>> set)

  spring framework friendly version of registerImmutable

### registerFastCloner

    public void registerFastCloner(Class<?> c,
                                   IFastCloner fastCloner)

### newInstance

    public <T> T newInstance(Class<T> c)

  creates a new instance of c. Override to provide your own implementation

  Type Parameters:
    `T` - the type of c
  Parameters:
    `c` - the class
  Returns:
    a new instance of c

### fastCloneOrNewInstance

    public <T> T fastCloneOrNewInstance(Class<T> c)

### deepClone

    public <T> T deepClone(T o)

  deep clones "o".

  Type Parameters:
    `T` - the type of "o"
  Parameters:
    `o` - the object to be deep-cloned
  Returns:
    a deep-clone of "o".

### shallowClone

    public <T> T shallowClone(T o)

  shallow clones "o". This means that if c=shallowClone(o) then c!=o. Any change to c won't affect o.

  Type Parameters:
    `T` - the type of o
  Parameters:
    `o` - the object to be shallow-cloned
  Returns:
    a shallow clone of "o"

### cloneInternal

    protected <T> T cloneInternal(T o,
                                  Map<Object,Object> clones)
                       throws IllegalAccessException

  PLEASE DONT CALL THIS METHOD The only reason for been public is because IFastCloner must invoke it

  Throws:
    `IllegalAccessException`

### copyPropertiesOfInheritedClass

    public <T,E extends T> void copyPropertiesOfInheritedClass(T src,
                                                               E dest)

  copies all properties from src to dest. Src and dest can be of different class, provided they contain same field names

  Parameters:
    `src` - the source object
    `dest` - the destination object which must contain as minimul all the fields of src

### isDumpClonedClasses

    public boolean isDumpClonedClasses()

### setDumpClonedClasses

    public void setDumpClonedClasses(boolean dumpClonedClasses)

  will println() all cloned classes. Useful for debugging only.

  Parameters:
    `dumpClonedClasses` - true to enable printing all cloned classes

### isCloningEnabled

    public boolean isCloningEnabled()

### setCloningEnabled

    public void setCloningEnabled(boolean cloningEnabled)

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2010. All Rights Reserved.