code: @SuppressWarnings("unchecked")
       static <E,TypedC extends Collection<E>> TypedC dynamicallyCastCollection(Collection<?> c,
                                                                                            Class<E> type, 
                                                                                            Class<TypedC> collectionType) {
          if (c == null)
              return null;
          if (!collectionType.isInstance(c))
              throw new ClassCastException(c.getClass().getName());
          assert checkCollectionMembers(c, type) :
              "The collection contains members with a type other than " + type.getName();
  
          return collectionType.cast(c);
      }
docs: Dynamically check that the members of the collection are all
  instances of the given type (or null), and that the collection
  itself is of the given collection type.
  
  @param <E>
  the collection's element type
  @param c
  the collection to cast
  @param type
  the class of the collection's element type.
  @return the dynamically-type checked collection.
  @throws java.lang.ClassCastException