Below is my code that was written for the following task (based on an [SO question][1]): > Given a Java `Collection` (of **N** elements) create an `ArrayList`, containing **N** > collections of the same type with just one element in each. Here's my code for such method: public static <E> ArrayList<Collection<E>> SplitCollection (Collection<E> col) throws InstantiationException, IllegalAccessException { ArrayList<Collection<E>> listOfCollections = new ArrayList<>(); for(E el: col) { // creating an empty collection of type E Collection<E> colEl = col.getClass().newInstance(); colEl.add(el); listOfCollections.add(colEl); } return listOfCollections; } 1. Is there a better way to create a run-time instance of an implementation class for an interface? 2. Did I overdo anything in light of type erasure? 3. Other code critique? When I decided to use no-argument constructor I was aware that the very existence of one is not (and cannot be) enforced by the interface. As it stated [in the docs][2]: > All general-purpose `Collection` implementation classes (which typically > implement `Collection` indirectly through one of its subinterfaces) > should provide two "standard" constructors: a void (no arguments) > constructor, which creates an empty `collection`, and a constructor with > a single argument of type `Collection`, which creates a new collection > with the same elements as its argument. In effect, the latter > constructor allows the user to copy any collection, producing an > equivalent collection of the desired implementation type. There is no > way to enforce this convention (as interfaces cannot contain > constructors) but all of the general-purpose `Collection` > implementations in the Java platform libraries comply. So I was writing my code for *general-purpose* `Collection` *implementations*. I never intended this code to be used for production purposes. I merely wanted to see how far *programming to interface* together with Generics could get you before you **have** to use a concrete type and implementation. [1]: https://stackoverflow.com/q/24923216/2055998 [2]: http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html