generic parameters approach