What is reflection, and why is it useful?
I\'m particularly interested in Java, but I assume the principles are the same in any language.
Reflection is a set of functions which allows you to access the runtime information of your program and modify it behavior (with some limitations).
It's useful because it allows you to change the runtime behavior depending on the meta information of your program, that is, you can check the return type of a function and change the way you handle the situation.
In C# for example you can load an assembly (a .dll) in runtime an examine it, navigating through the classes and taking actions according to what you found. It also let you create an instance of a class on runtime, invoke its method, etc.
Where can it be useful? Is not useful every time but for concrete situations. For example you can use it to get the name of the class for logging purposes, to dynamically create handlers for events according to what's specified on a configuration file and so on...