How Do Generics Work In Java