### Question:
CloneHelper { @Nullable public static <DATATYPE> DATATYPE getClonedValue (@Nullable final DATATYPE aObject) { if (aObject == null) return null; final Class <?> aClass = aObject.getClass (); if (ClassHelper.isPrimitiveWrapperType (aClass) || aObject instanceof String || aClass.getAnnotation (Immutable.class) != null) return aObject; return _getGenericClone (aObject); } private  CloneHelper(); @Nullable static DATATYPE getClonedValue(@Nullable final DATATYPE aObject); @Nullable static DATATYPE getCloneIfNotNull(@Nullable final DATATYPE aObject); @Nonnull @ReturnsMutableCopy static ICommonsList <DATATYPE> getGenericClonedList(@Nullable final Iterable <DATATYPE> aList); @Nonnull @ReturnsMutableCopy static ICommonsList <DATATYPE> getClonedList(@Nullable final Iterable <DATATYPE> aList);  }### Answer:
@Test public void testGetClonedValue () throws CloneNotSupportedException { assertNull (CloneHelper.getClonedValue (null)); assertEquals ("Hallo", CloneHelper.getClonedValue ("Hallo")); assertEquals (Double.valueOf (3.1234), CloneHelper.getClonedValue (Double.valueOf (3.1234))); final MockCloneable d0 = new MockCloneable (); assertEquals (0, d0.getI ()); assertEquals (1, d0.clone ().getI ()); assertEquals (2, d0.clone ().clone ().getI ()); assertEquals (1, CloneHelper.getClonedValue (d0).getI ()); final MockICloneable d1 = new MockICloneable (); assertEquals (0, d1.getI ()); assertEquals (1, d1.getClone ().getI ()); assertEquals (2, d1.getClone ().getClone ().getI ()); assertEquals (1, CloneHelper.getClonedValue (d1).getI ()); final MockWithCopyCtor d2 = new MockWithCopyCtor (); assertEquals (1, CloneHelper.getClonedValue (d2).getI ()); final MockWithPrivateCopyCtor d3 = new MockWithPrivateCopyCtor (); assertNull (CloneHelper.getClonedValue (d3)); final MockNoPublicCtor d4 = MockNoPublicCtor.getInstance (); assertNull (CloneHelper.getClonedValue (d4)); final MockCloneNotSupported d5 = new MockCloneNotSupported (); assertNull (CloneHelper.getClonedValue (d5)); assertNull (CloneHelper.getClonedValue (new Object ())); }