Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Каждому методу, полю, конструктору класса также соответствуют объекты, список которых можно получить вызовом соответствующих методов объекта Class: getMethods(), getFields(), getConstructors(), getDeclaredMethods() и т.д. В результате будут получены объекты, которые отвечают за поля, методы, конструкторы объекта. Их можно использовать для формирования динамических вызовов Java - этот механизм называется reflection. Необходимые классы содержатся в пакете java. lang. reflection.
Рассмотрим пример использования этой технологии:
package demo.lang; interface Vehicle { void go();
}
class Automobile implements Vehicle { public void go() {
System.out.println("Automobile go!");
}
}
class Truck implements Vehicle { public Truck(int i) { super();
}
public void go() {
System.out.println("Truck go!");
}
}
public class VehicleStarter {
public static void main(String[] args) { Vehicle vehicle;
String[] vehicleNames = {"demo.lang.Automobile",
"demo.lang.Truck", "demo.lang.Tank"}; for(int ¡=0; KvehicleNames.length; i++) {
try {
String name = vehicleNames[i]; System.out.println("look for class for:" + name); Class aClass = Class.forName(name); System.out.println("creating vehicle..."); vehicle = (Vehicle)aClass.newlnstance(); System.out.println("create vehicle:" +
vehicle.getClass()); vehicle.go(); } catch(ClassNotFoundException e) { System.out.printlnf'Exception:" + e);
} catch(lnstantiationException e) {
System.out.printlnf'Exception: " + e);
}
}
}
}
Если запустить эту программу, на экран будет выведено следующее:
look for class for: demo.lang.Automobile creating vehicle...
create vehicle: class demo.lang.Automobile Automobile go!
look for class for: demo.lang.Truck creating vehicle...
Instantiation exception: java.lang.InstantiationException
look for class for: demo.lang.Tank
Class not found: java.lang.ClassNotFoundException:
demo.lang.Tank
В этом примере делается попытка создать с помощью reflection три объекта. Имена классов, от которых они должны быть порождены, записаны в массив vehicleNames. Объект класса Automobile был успешно создан, причем, дальнейшая работа с ним велась через интерфейс Vehicle