さまざまなオブジェクトを複製する古いコードがあります。java.util.Listlist
として宣言されています
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);