There's actually a good bit of reflection in Tiger (Java 5.0, the newest version) that is new. But, you're going to have to deal with something else new, called <i>erasure</i>, that can make life complicated.
In Tiger, you have meta-data called annotations. These allow you to (surprise) annotate your code. So you can indicate if code is unfinished, or should be documented in abnormal ways, or anything else you can come up with.
And, you can reflect into those annotations on runtime code. However, there are some tricky issues, such as when an annotation is retained at runtime (meaning that you can reflect on it), or when they're not. I'm not sure if you wanted more detail on that, but I can provide it if you like.
The other issue is that generics adds some complications to all of this. Because you can declare a type, like for a List (List<
String> stringList = new LinkedList<String>
, there are some issues that require reflectiont to allow you to check that information out at runtime. But that gets -really- complicated, and is where erasure creeps in.
Erasure, in its simplest form, removes parameterization at runtime. This allows code in a Tiger JVM to play nicely with non-Tiger code, and to remove generics from being a runtime feature. So at runtime, that stringList is just a List, not a List<String>. However, some vagaries of reflection allow you to still get at that information.
So there's a summary -- maybe you want to let me/us know what you're interested in, and we can drill down?
Thanks
Brett