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 {}
cHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihBbnRUeXBlLlFVRUVOLmdldEFudFR5cGVDbGFzcygpLmdldE5hbWUoKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEFudFR5cGUuU0NPVVQuZ2V0QW50VHlwZUNsYXNzKCkuZ2V0TmFtZSgpKTsKICAgIH0KfQoKZmluYWwgY2xhc3MgQW50VHlwZTxUIGV4dGVuZHMgQW50PiB7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEFudFR5cGU8QW50UXVlZW4+ICAgIFFVRUVOICAgID0gbmV3IEFudFR5cGU8PihBbnRRdWVlbi5jbGFzcyAgICk7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEFudFR5cGU8QW50V2Fycmlvcj4gIFdBUlJJT1IgID0gbmV3IEFudFR5cGU8PihBbnRXYXJyaW9yLmNsYXNzICk7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEFudFR5cGU8QW50R2F0aGVyZXI+IEdBVEhFUkVSID0gbmV3IEFudFR5cGU8PihBbnRHYXRoZXJlci5jbGFzcyk7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEFudFR5cGU8QW50U2NvdXQ+ICAgIFNDT1VUICAgID0gbmV3IEFudFR5cGU8PihBbnRTY291dC5jbGFzcyAgICk7CgogICAgcHJpdmF0ZSBmaW5hbCBDbGFzczxUPiBhbnRUeXBlQ2xhc3M7CgogICAgcHJpdmF0ZSBBbnRUeXBlKENsYXNzPFQ+IGFudFR5cGVDbGFzcykgewogICAgICAgIHRoaXMuYW50VHlwZUNsYXNzID0gYW50VHlwZUNsYXNzOwogICAgfQoKICAgIHB1YmxpYyBDbGFzczxUPiBnZXRBbnRUeXBlQ2xhc3MoKSB7CiAgICAgICAgcmV0dXJuIGFudFR5cGVDbGFzczsKICAgIH0KfQoKaW50ZXJmYWNlIEFudCB7fQpjbGFzcyBBbnRXYXJyaW9yIGltcGxlbWVudHMgQW50IHt9CmNsYXNzIEFudEdhdGhlcmVyIGltcGxlbWVudHMgQW50IHt9CmNsYXNzIEFudFNjb3V0IGltcGxlbWVudHMgQW50IHt9CmNsYXNzIEFudFF1ZWVuIGltcGxlbWVudHMgQW50IHt9