Java Reflection позволяет проверять классы, интерфейсы, поля и методы во время выполнения, не зная имен классов, методов и т. д. во время компиляции. Также возможно создавать экземпляры новых объектов, вызывать методы и получать/устанавливать значения полей с помощью отражения.

Например, предположим, что у вас есть объект неизвестного типа в Java, и вы хотели бы вызвать для него метод doSomething, если он существует. Система статической типизации Java на самом деле не предназначена для поддержки этого, если объект не соответствует известному интерфейсу, но с помощью отражения ваш код может посмотреть на объект и узнать, есть ли у него метод с именем «doSomething», а затем вызвать его, если вы хотеть.

Итак, чтобы дать вам пример кода на Java (представьте, что рассматриваемый объект — это foo):

Method method = foo.getClass().getMethod("doSomething", null);
method.invoke(foo, null);

Ссылка:

[1] https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful

[2] http://tutorials.jenkov.com/java-reflection/index.html

[3] https://www.oracle.com/technetwork/articles/java/javareflection-1536171.html