Adding field declaration as one of the generics.
Adding hasGeneric().
Change [createNew] constructor to private.
Adding type checking.