PolyJ – Java with Parameterized Types is a portable compiler that accepts an extended version of the Java language. The PolyJ language includes support for generic programming in the form of parameterized types. Like some other proposals for adding genericity to Java, PolyJ provides constrained parametric polymorphism. Unlike some, it uses the constraint mechanism of where clauses, which is important because it provides flexibility when composing a program. PolyJ also allows all types to be used as parameters, even basic types like int. A powerful feature of PolyJ is that instantiation types and parameter types are first-class types that may be used wherever a type may be used — particularly, in safe run-time casts and with “instanceof”.