Constructor[] c = aClass.getConstructors(); // Retrieve all the constructors
// of the class 'aClass'
for (Constructor constructor : c) { // Iterate all constructors
// Until the only default constructor is found.
if (constructor.getParameterTypes().length == 0) {
// Create a new instance of 'aClass' using the default constructor
// Hope that 'aClass' implements 'AInterface' otherwise ClassCastException ...
AInterface action = (AInterface) constructor.newInstance();
try {
// action has been cast to AInterface - so it can be used to call the run method
// defined on the AInterface interface.
action.run(request, response);
} // Oops - missing catch and/or finally. That won't compile
}
}
// Missing a bit of error handling here for the countless reflection exception
// Unless the method is declared as 'throws Exception' or similar
Пример использования:
У вас есть класс где-то с именем 'TheClass'
public class TheClass implements AInterface {
public void run(HttpServletRequest request, HttpServletResponse response) {
System.out.println("Hello from TheClass.run(...)");
// Implement the method ...
}
}
Где-то в приложении, либо используя Reflection, либо читая файл конфигурации.
Приложение обнаруживает, что должно выполнить «TheClass».
У вас нет никаких указаний на TheClass, кроме того, что он должен реализовывать AInterface и у него есть конструктор по умолчанию.
Вы можете создать объект Class, используя
Class aClass = Class.forName("TheClass");
и используйте «aClass» в предыдущем фрагменте кода (после добавления кода для обработки ошибок). Вы должны увидеть в консоли
Hello from TheClass.run(...)