Я настроил ваш пример, чтобы он стал более понятным ... и реализовал update
.
public class Ticket<T extends MySuperClass> {
private Class<T> c;
private T t;
public Ticket(Class<T> c) throws InstantiationException, IllegalAccessException {
this.c = c;
this.t = c.newInstance();
}
public Class<T> getClass() {
return this.c;
}
public void update() {
t.update();
}
/* ... */
}
Метод update
вызывает t.update()
, который полиморфно отправляет методу update
фактического объекта, на который ссылается t
. Обратите внимание, что я добавил код для создания и хранения экземпляра Class<T>
.
ОБНОВЛЕНИЕ - Я добавил исключения в конструктор Ticket
. Это часть цены, которую вы платите за использование отражения для создания экземпляров ... вместо того, чтобы создавать их, используя new
и передавая их в качестве аргументов.