我有一个克隆不同对象的旧代码。list
被声明为java.util.List
CloneUtils.cloneList(list);
里面的cloneList
样子是这样的:
public static List cloneList(final List list) throws CloneNotSupportedException {
List list2;
try {
list2 = list.getClass().newInstance();
} catch (Exception e) {
Log.debug(e);
list2 = new ArrayList();
}
调用cloneList
引发异常:
jvm 1 | DEBUG[2012-10-09 16:57:58,611]: java.util.Arrays$ArrayList
jvm 1 | java.lang.InstantiationException: java.util.Arrays$ArrayList
jvm 1 | at java.lang.Class.newInstance0(Class.java:340)
jvm 1 | at java.lang.Class.newInstance(Class.java:308)
jvm 1 | at com.acme.common.util.CloneUtils.cloneList(CloneUtils.java:
88)
jvm 1 | at com.acme.common.data.PropertyDescriptor.clone(PropertyDesc
riptor.java:165)
jvm 1 | at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
jvm 1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet
hodAccessorImpl.java:25)
jvm 1 | at java.lang.reflect.Method.invoke(Method.java:597)
是否可以创建一个与cloneList
使用反射传递给方法的对象具有相同类型的新对象?
编辑1
list
传递给该cloneList
方法的参数来自:
String[] fields = field.split(",");
list = Arrays.asList(fields);