Add methods for cloneables to ObjectUtils -----------------------------------------
Key: LANG-576 URL: https://issues.apache.org/jira/browse/LANG-576 Project: Commons Lang Issue Type: New Feature Components: lang.* Reporter: Joerg Schaible Assignee: Joerg Schaible Priority: Minor Fix For: 3.0 Object.clone is declared protected, which makes it impossible to write code like: {code:java} if (obj instanceof Cloneable) { Object clone = obj.clone(); ... } {code} Following two methods will help in such a situation: {code:java} /** * Clone an object. * * @param <T> the type of the object * @param o the object to clone * @return the clone if the object implements {...@link Cloneable} otherwise <code>null</code> * @throws CloneFailedException if the object is cloneable and the clone operation fails */ public static <T> T clone(final T o) { if (o instanceof Cloneable) { try { final Method clone = o.getClass().getMethod("clone", (Class[])null); @SuppressWarnings("unchecked") final T result = (T)clone.invoke(o, (Object[])null); return result; } catch (final NoSuchMethodException e) { throw new CloneFailedException("Cloneable type has no clone method", e); } catch (final IllegalAccessException e) { throw new CloneFailedException("Cannot clone Cloneable type", e); } catch (final InvocationTargetException e) { throw new CloneFailedException("Exception cloning Cloneable type", e.getCause()); } } return null; } /** * Clone an object if possible. * * @param <T> the type of the object * @param o the object to clone * @return the clone if the object implements {...@link Cloneable} otherwise the object itself * @throws CloneFailedException if the object is cloneable and the clone operation fails */ public static <T> T cloneIfPossible(final T o) { final T clone = clone(o); return clone == null ? o : clone; } {code} Comments? Unit tests will be provided also. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.