/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
System.
out.
println(MC.
Type.
getValue("MInteger").
getName()); System.
out.
println(MC.
Type.
getValue("MBoolean").
getName());
}
}
interface MC {
public static final Type<Boolean> MBoolean = new Type<>("MBoolean");
public static final Type<Integer> MInteger = new Type<>("MInteger");
public static class Type<T> {
private static final Map
<String, Type
<?>> types
= new HashMap
<>(); static {
types.put(MBoolean.getName(), MBoolean);
types.put(MInteger.getName(), MInteger);
}
this.name = name;
}
return name;
}
public static Type
<?> getValue
(String name
) { return types.get(name);
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oTUMuVHlwZS5nZXRWYWx1ZSgiTUludGVnZXIiKS5nZXROYW1lKCkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihNQy5UeXBlLmdldFZhbHVlKCJNQm9vbGVhbiIpLmdldE5hbWUoKSk7CgoKCX0KfQoKaW50ZXJmYWNlIE1DIHsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVHlwZTxCb29sZWFuPiBNQm9vbGVhbiA9IG5ldyBUeXBlPD4oIk1Cb29sZWFuIik7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFR5cGU8SW50ZWdlcj4gTUludGVnZXIgPSBuZXcgVHlwZTw+KCJNSW50ZWdlciIpOwoKICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHlwZTxUPiB7CiAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBUeXBlPD8+PiB0eXBlcyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgICB0eXBlcy5wdXQoTUJvb2xlYW4uZ2V0TmFtZSgpLCBNQm9vbGVhbik7CiAgICAgICAgICAgIHR5cGVzLnB1dChNSW50ZWdlci5nZXROYW1lKCksIE1JbnRlZ2VyKTsKICAgICAgICB9CiAgICAgICAgcHJpdmF0ZSBUeXBlKFN0cmluZyBuYW1lKSB7CiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgICAgIHJldHVybiBuYW1lOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIHN0YXRpYyBUeXBlPD8+IGdldFZhbHVlKFN0cmluZyBuYW1lKSB7CiAgICAgICAgICAgIHJldHVybiB0eXBlcy5nZXQobmFtZSk7CiAgICAgICAgfQogICAgfQp9