Class FastCloner


  • public class FastCloner
    extends Object
    Cloner: deep clone objects. This class is thread safe. One instance can be used by multiple threads on the same time. 18 Sep 2008
    • Constructor Detail

      • FastCloner

        public FastCloner()
    • 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.
      • 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
      • 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
      • 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"
      • 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)