Generalizing existing classes with generics