title: InstantiationException when constructing an object that implements the List interface
body: <p>I have an old code that clones different objects. <code>list</code> is declared as <strong>java.util.List</strong></p>
  
  <pre><code>CloneUtils.cloneList(list);
  </code></pre>
  
  <p>Inside the <code>cloneList</code> looks like this:</p>
  
  <pre><code>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();
      }
  </code></pre>
  
  <p>The call to <code>cloneList</code> throws an exception:</p>
  
  <pre><code>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)
  </code></pre>
  
  <p>Is it possible to create a new object with the same type as the one passed to the <code>cloneList</code> method using reflection?</p>
  
  <p><strong>Edit1</strong></p>
  
  <p>The <code>list</code> argument that is passed to the <code>cloneList</code> method is obtained from:</p>
  
  <pre><code>String[] fields = field.split(",");
  list = Arrays.asList(fields);    
  </code></pre>