Visitor pattern with reflection