public class Main {
static class Foo {
public void foo() {}
private void privateFoo() {}
}
static class Bar extends Foo {
public void bar() {}
private void privateBar() {}
}
printBoth("Main$Foo", "foo");
printBoth("Main$Foo", "privateFoo");
printBoth("Main$Bar", "foo");
printBoth("Main$Bar", "privateFoo");
printBoth("Main$Bar", "bar");
printBoth("Main$Bar", "privateBar");
}
private static void printBoth
(String clsName,
String mtName
) { printGetDeclaredMethod(clsName, mtName);
printGetMethod(clsName, mtName);
}
static void printGetDeclaredMethod
(String clsName,
String mtName
) { try {
System.
out.
println("getDeclaredMethod: " + Class.
forName(clsName
).
getDeclaredMethod(mtName
)); System.
out.
println("getDeclaredMethod: " + e
); }
}
try {
System.
out.
println("getMethod: " + Class.
forName(clsName
).
getMethod(mtName
)); System.
out.
println("getMethod: " + e
); }
}
}
cHVibGljIGNsYXNzIE1haW4gewoKCXN0YXRpYyBjbGFzcyBGb28gewoJCXB1YmxpYyB2b2lkIGZvbygpIHt9CgkJcHJpdmF0ZSB2b2lkIHByaXZhdGVGb28oKSB7fQoJfQoKCXN0YXRpYyBjbGFzcyBCYXIgZXh0ZW5kcyBGb28gewoJCXB1YmxpYyB2b2lkIGJhcigpIHt9CgkJcHJpdmF0ZSB2b2lkIHByaXZhdGVCYXIoKSB7fQoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uIHsKCQlwcmludEJvdGgoIk1haW4kRm9vIiwgImZvbyIpOwoJCXByaW50Qm90aCgiTWFpbiRGb28iLCAicHJpdmF0ZUZvbyIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJCXByaW50Qm90aCgiTWFpbiRCYXIiLCAiZm9vIik7CgkJcHJpbnRCb3RoKCJNYWluJEJhciIsICJwcml2YXRlRm9vIik7CgkJcHJpbnRCb3RoKCJNYWluJEJhciIsICJiYXIiKTsKCQlwcmludEJvdGgoIk1haW4kQmFyIiwgInByaXZhdGVCYXIiKTsKCgl9CgoJcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludEJvdGgoU3RyaW5nIGNsc05hbWUsIFN0cmluZyBtdE5hbWUpIHsKCQlwcmludEdldERlY2xhcmVkTWV0aG9kKGNsc05hbWUsIG10TmFtZSk7CgkJcHJpbnRHZXRNZXRob2QoY2xzTmFtZSwgbXROYW1lKTsKCX0KCglzdGF0aWMgdm9pZCBwcmludEdldERlY2xhcmVkTWV0aG9kKFN0cmluZyBjbHNOYW1lLCBTdHJpbmcgbXROYW1lKSB7CgkJdHJ5IHsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJnZXREZWNsYXJlZE1ldGhvZDogIiArIENsYXNzLmZvck5hbWUoY2xzTmFtZSkuZ2V0RGVjbGFyZWRNZXRob2QobXROYW1lKSk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJnZXREZWNsYXJlZE1ldGhvZDogIiArIGUpOwoJCX0KCX0KCXN0YXRpYyB2b2lkIHByaW50R2V0TWV0aG9kKFN0cmluZyBjbHNOYW1lLCBTdHJpbmcgbXROYW1lKSB7CgkJdHJ5IHsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJnZXRNZXRob2Q6ICAgICAgICAgIiArIENsYXNzLmZvck5hbWUoY2xzTmFtZSkuZ2V0TWV0aG9kKG10TmFtZSkpOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0TWV0aG9kOiAgICAgICAgICIgKyBlKTsKCQl9Cgl9Cn0=