remove generics from Interface and abstract impl