let's call all 'new' as 'neo' and all 'class' as 'clazz' in val or method name to prevent the keyword reservation problem.