Proper use of generics to widen to scope of the classes usability