Class FieldAccessingSolutionCloner<Solution_>

  • Type Parameters:
    Solution_ - the solution type, the class with the PlanningSolution annotation
    All Implemented Interfaces:
    SolutionCloner<Solution_>

    public class FieldAccessingSolutionCloner<Solution_>
    extends Object
    implements SolutionCloner<Solution_>
    • Method Detail

      • cloneSolution

        public Solution_ cloneSolution​(Solution_ originalSolution)
        Description copied from interface: SolutionCloner
        Does a planning clone. The returned PlanningSolution clone must fulfill these requirements:
        • The clone must represent the same planning problem. Usually it reuses the same instances of the problem facts and problem fact collections as the original.
        • The clone must have the same (equal) score as the original.
        • The clone must use different, cloned instances of the entities and entity collections. If a cloned entity changes, the original must remain unchanged. If an entity is added or removed in a cloned PlanningSolution, the original PlanningSolution must remain unchanged.
        Note that a class might support more than 1 clone method: planning clone is just one of them.

        This method is thread-safe.

        Specified by:
        cloneSolution in interface SolutionCloner<Solution_>
        Parameters:
        originalSolution - never null, the original PlanningSolution
        Returns:
        never null, the cloned PlanningSolution
      • retrieveCachedConstructor

        protected <C> Constructor<C> retrieveCachedConstructor​(Class<C> clazz)
        This method is thread-safe.
        Type Parameters:
        C - type
        Parameters:
        clazz - never null
        Returns:
        never null
      • retrieveCachedFields

        protected <C> List<Field> retrieveCachedFields​(Class<C> clazz)
        This method is thread-safe.
        Type Parameters:
        C - type
        Parameters:
        clazz - never null
        Returns:
        never null
      • retrieveDeepCloneDecision

        protected boolean retrieveDeepCloneDecision​(Field field,
                                                    Class<?> fieldInstanceClass,
                                                    Class<?> actualValueClass)
        This method is thread-safe.
        Parameters:
        field - never null
        fieldInstanceClass - never null
        actualValueClass - never null
        Returns:
        never null
      • isFieldAnEntityPropertyOnSolution

        protected boolean isFieldAnEntityPropertyOnSolution​(Field field,
                                                            Class<?> fieldInstanceClass)
      • isFieldAnEntityOrSolution

        protected boolean isFieldAnEntityOrSolution​(Field field,
                                                    Class<?> fieldInstanceClass)
      • retrieveDeepCloneDecisionForActualValueClass

        protected boolean retrieveDeepCloneDecisionForActualValueClass​(Class<?> actualValueClass)
        This method is thread-safe.
        Parameters:
        actualValueClass - never null
        Returns:
        never null
      • isClassDeepCloned

        protected boolean isClassDeepCloned​(Class<?> type)