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.