This seems to be to be nothing more than applying the same idea behind objects and interfaces to other types... if all variables were typed Object and you had: interface Int {} interface String {} void whatever(Int lineno, String rawdata) {} it'd be the same thing, would it not?