This notion that having a huge gaping defect is just a different way of doing things is absurd. Lacking parametric polymorphism is completely unacceptable. This is a solved problem as of 1973. There is no excuse. Inheritance has nothing to do with it, and "all the factory code" has even less to do with it. You are saying "I like go because it isn't java", which is fine, but you are implying that being java is necessary to have parametric polymorphism, which is not at all accurate.