class GenericClass<T> {
public T method1(T obj, Class<T> clazz) {
return obj;
}
public <U extends T> U method2(U obj, Class<U> clazz) {
return obj;
}
}
class Test extends GenericClass<SuperClass> {
public SuperClass printMethod1() {
SuperClass sClass = new SuperClass();
sClass.setName("name");
sClass.setEmail("email");
sClass.setAddress("Address");
return this.method1(sClass, SuperClass.class);
}
public SubClass printMethod2() {
SubClass subClass = new SubClass();
subClass.setName("testName");
subClass.setEmail("testEmail");
subClass.setAddress("testAddress");
subClass.setName2("name2");
return this.method2(subClass, SubClass.class);
}
}
class SuperClass {
return this.name;
}
public void setName
(String name_p
) { this.name = name_p;
}
return this.email;
}
public void setEmail
(String email_p
) { this.email = email_p;
}
return this.address;
}
public void setAddress
(String address_p
) { this.address = address_p;
}
}
class SubClass extends SuperClass {
return this.name2;
}
public void setName2
(String name2_p
) { this.name2 = name2_p;
}
}
class Main
{ public static void main
(String[] args
) {} }
Y2xhc3MgR2VuZXJpY0NsYXNzPFQ+IHsKCiAgICBwdWJsaWMgVCBtZXRob2QxKFQgb2JqLCBDbGFzczxUPiBjbGF6eikgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvYmopOwogICAgICAgIHJldHVybiBvYmo7CiAgICB9CgogICAgcHVibGljIDxVIGV4dGVuZHMgVD4gVSBtZXRob2QyKFUgb2JqLCBDbGFzczxVPiBjbGF6eikgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvYmopOwogICAgICAgIHJldHVybiBvYmo7CiAgICB9Cn0KCmNsYXNzIFRlc3QgZXh0ZW5kcyBHZW5lcmljQ2xhc3M8U3VwZXJDbGFzcz4gewoKICAgIHB1YmxpYyBTdXBlckNsYXNzIHByaW50TWV0aG9kMSgpIHsKICAgICAgICBTdXBlckNsYXNzIHNDbGFzcyA9IG5ldyBTdXBlckNsYXNzKCk7CiAgICAgICAgc0NsYXNzLnNldE5hbWUoIm5hbWUiKTsKICAgICAgICBzQ2xhc3Muc2V0RW1haWwoImVtYWlsIik7CiAgICAgICAgc0NsYXNzLnNldEFkZHJlc3MoIkFkZHJlc3MiKTsKICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QxKHNDbGFzcywgU3VwZXJDbGFzcy5jbGFzcyk7CiAgICB9CgogICAgcHVibGljIFN1YkNsYXNzIHByaW50TWV0aG9kMigpIHsKICAgICAgICBTdWJDbGFzcyBzdWJDbGFzcyA9IG5ldyBTdWJDbGFzcygpOwogICAgICAgIHN1YkNsYXNzLnNldE5hbWUoInRlc3ROYW1lIik7CiAgICAgICAgc3ViQ2xhc3Muc2V0RW1haWwoInRlc3RFbWFpbCIpOwogICAgICAgIHN1YkNsYXNzLnNldEFkZHJlc3MoInRlc3RBZGRyZXNzIik7CiAgICAgICAgc3ViQ2xhc3Muc2V0TmFtZTIoIm5hbWUyIik7CiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kMihzdWJDbGFzcywgU3ViQ2xhc3MuY2xhc3MpOwogICAgfQp9CgpjbGFzcyBTdXBlckNsYXNzIHsKCiAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogICAgcHJpdmF0ZSBTdHJpbmcgZW1haWw7CiAgICBwcml2YXRlIFN0cmluZyBhZGRyZXNzOwoKICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5uYW1lOwogICAgfQogICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZV9wKSB7CiAgICAgICAgdGhpcy5uYW1lID0gbmFtZV9wOwogICAgfQogICAgcHVibGljIFN0cmluZyBnZXRFbWFpbCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5lbWFpbDsKICAgIH0KICAgIHB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbF9wKSB7CiAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsX3A7CiAgICB9CiAgICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuYWRkcmVzczsKICAgIH0KICAgIHB1YmxpYyB2b2lkIHNldEFkZHJlc3MoU3RyaW5nIGFkZHJlc3NfcCkgewogICAgICAgIHRoaXMuYWRkcmVzcyA9IGFkZHJlc3NfcDsKICAgIH0KfQoKY2xhc3MgU3ViQ2xhc3MgZXh0ZW5kcyBTdXBlckNsYXNzIHsKCiAgICBwcml2YXRlIFN0cmluZyBuYW1lMjsKCiAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUyKCkgewogICAgICAgIHJldHVybiB0aGlzLm5hbWUyOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHNldE5hbWUyKFN0cmluZyBuYW1lMl9wKSB7CiAgICAgICAgdGhpcy5uYW1lMiA9IG5hbWUyX3A7CiAgICB9Cgp9CgpjbGFzcyBNYWluIHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykge30gfQ==