template method reflect