Para clonar una interfaz genérica como la java.util.Listque necesita, solo deberá lanzarla. Aquí tienes un ejemplo:
List list = new ArrayList();
List list2 = ((List) ( (ArrayList) list).clone());
Es un poco complicado, pero funciona si está limitado a devolver un List interfaz, por lo que cualquier persona después de usted puede implementar su lista cuando lo desee.
Sé que esta respuesta está cerca de la respuesta final, pero mi respuesta responde cómo hacer todo eso mientras estás trabajando con Listel padre genérico.ArrayList