Generics have what is known as type erasure - List and List are the same type, the compiler just places compile-time restrictions on what you can do with them.
You could check the type of the first object in the list and call a (differently-named) internal method based on that.