You don't need to mess with a type system unless you're doing some fairly advanced stuff. And then messing with type system starts to be better than messing with reflection, anyway. I'm a dynamic-languages kind of guy, but Scala type system is one of its advantages. Scala type system is comparable with OCaml and Haskell and that's really something you can't say about Java.