beyond class : class structure enum generic