Java
Reflection
Reflection is used to describe code which is able to inspect other code in the same system or itself.
If you have an unknown Java object type and want to call its doSomething method, using reflection, your code can look at the object and find out if it has that method and call it if desired.
Method method = foo.getClass().getMethod("doSomething", null);
method.invoke(foo, null);
Annotations commonly use reflection.