public class Main {
    public static void main(String[] args) {
        System.out.println(AntType.QUEEN.getAntTypeClass().getName());
        System.out.println(AntType.SCOUT.getAntTypeClass().getName());
    }
}

final class AntType<T extends Ant> {
    public static final AntType<AntQueen>    QUEEN    = new AntType<>(AntQueen.class   );
    public static final AntType<AntWarrior>  WARRIOR  = new AntType<>(AntWarrior.class );
    public static final AntType<AntGatherer> GATHERER = new AntType<>(AntGatherer.class);
    public static final AntType<AntScout>    SCOUT    = new AntType<>(AntScout.class   );

    private final Class<T> antTypeClass;

    private AntType(Class<T> antTypeClass) {
        this.antTypeClass = antTypeClass;
    }

    public Class<T> getAntTypeClass() {
        return antTypeClass;
    }
}

interface Ant {}
class AntWarrior implements Ant {}
class AntGatherer implements Ant {}
class AntScout implements Ant {}
class AntQueen implements Ant {}