interface Talker
{
}
class Pet<T extends Talker>
{
private T pet;
public Pet(T pet)
{
this.pet = pet;
}
{
return pet.talks();
}
}
class Cat implements Talker
{
{
return "Meow";
}
}
class Dog implements Talker
{
{
return "Woof";
}
}
public class Main
{
public static void main
(String[] args
) {
Pet<Cat> cat = new Pet<Cat>(new Cat());
System.
out.
println("Cat says " + cat.
talks());
Pet<Dog> dog = new Pet<Dog>(new Dog());
System.
out.
printf("Dog says " + dog.
talks()); }
}
aW50ZXJmYWNlIFRhbGtlcgp7CiAgICBTdHJpbmcgdGFsa3MoKTsKfQoKY2xhc3MgUGV0PFQgZXh0ZW5kcyBUYWxrZXI+CnsKICAgIHByaXZhdGUgVCBwZXQ7CiAgICAKICAgIHB1YmxpYyBQZXQoVCBwZXQpCiAgICB7CiAgICAgICAgdGhpcy5wZXQgPSBwZXQ7CiAgICB9CiAgICAKICAgIHB1YmxpYyBTdHJpbmcgdGFsa3MoKQogICAgewogICAgICAgIHJldHVybiBwZXQudGFsa3MoKTsKICAgIH0KfQoKY2xhc3MgQ2F0IGltcGxlbWVudHMgVGFsa2VyCnsKICAgIHB1YmxpYyBTdHJpbmcgdGFsa3MoKQogICAgewogICAgICAgIHJldHVybiAiTWVvdyI7CiAgICB9Cn0KCmNsYXNzIERvZyBpbXBsZW1lbnRzIFRhbGtlcgp7CiAgICBwdWJsaWMgU3RyaW5nIHRhbGtzKCkKICAgIHsKICAgICAgICByZXR1cm4gIldvb2YiOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgTWFpbgp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgewogICAgICAgIFBldDxDYXQ+IGNhdCA9IG5ldyBQZXQ8Q2F0PihuZXcgQ2F0KCkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F0IHNheXMgIiArIGNhdC50YWxrcygpKTsKICAgICAgICAKICAgICAgICBQZXQ8RG9nPiBkb2cgPSBuZXcgUGV0PERvZz4obmV3IERvZygpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiRG9nIHNheXMgIiArIGRvZy50YWxrcygpKTsKICAgIH0KICAgIAp9