package groovy.tiger; import java.lang.reflect.Type; import java.lang.reflect.ParameterizedType; /** * @author Emmanuel Bernard */ public class Home { T owner; public Class getOwnerClass() { Class entityClass; Type type = getClass().getGenericSuperclass(); System.out.println( getClass() ); System.out.println( getClass().getSuperclass() ); System.out.println( getClass().getGenericSuperclass() ); if (type instanceof ParameterizedType) { ParameterizedType paramType = (ParameterizedType) type; entityClass = (Class) paramType.getActualTypeArguments()[0]; } else { throw new IllegalArgumentException("Could not guess entity class by reflection"); } return entityClass; } } /* The following Groovy class, does not even compile package groovy.tiger import java.lang.reflect.Type; import java.lang.reflect.ParameterizedType; class Home { T owner public Class getOwnerClass() { def entityClass Type type = getClass().getGenericSuperclass(); if (type instanceof ParameterizedType) { ParameterizedType paramType = (ParameterizedType) type; entityClass = (Class) paramType.getActualTypeArguments()[0]; } else { throw new IllegalArgumentException("Could not guess entity class by reflection"); } return entityClass; } } */