[ https://issues.apache.org/jira/browse/LANG-576?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Joerg Schaible updated LANG-576: -------------------------------- Attachment: Cloneable.diff > 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 > > Attachments: Cloneable.diff > > > 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 > * @since 3.0 > */ > 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 > * @since 3.0 > */ > public static <T> T cloneIfPossible(final T o) { > final T clone = clone(o); > return clone == null ? o : clone; > } > {code} > Comments? Note, that the code currently introduces also a new > CloneFailedException. Use another existing one? > 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.