I've been discussing with my friend on the matter of metaprogramming; he argues that Java is the worst language because of its inability to metaprogram well.

He contrasted this with C++'s ability to metaprogram rather well.

But is he correct? I've certainly never learned to metaprogram in Java, but does that mean it is impossible to do so?