Use as much generics as possible