code: public <T> Collection<T> speciesNew(Collection<?> collection)
      {
          if (collection instanceof MutableCollection)
          {
              return ((MutableCollection<T>) collection).newEmpty();
          }
          if (collection instanceof Proxy)
          {
              return DefaultSpeciesNewStrategy.createNewInstanceForCollectionType(collection);
          }
          if (ReflectionHelper.hasDefaultConstructor(collection.getClass()))
          {
              return (Collection<T>) ReflectionHelper.newInstance(collection.getClass());
          }
          return DefaultSpeciesNewStrategy.createNewInstanceForCollectionType(collection);
      }
docs: Creates a new instance of a collection based on the class type of collection, not on the type of objects the collections contains.
  e.g.  CollectionFactory.<Integer>speciesNew(hashSetOfString) returns a new HashSet<Integer>();
  e.g.  CollectionFactory.<Date>speciesNew(linkedListOfWombles) returns a new LinkedList<Date>();