class Hair
{
public static void main
(String[] args
) {
Hair hair = new Hair();
hair.invokeMethod(100);
hair.invokeMethod(200);
hair.setMethod(Hair::datsumou);
hair.invokeMethod(500);
hair.invokeMethod(800);
hair.setMethod(Hair::shokumou);
hair.invokeMethod(1);
}
private int count = 1000;
private Method method
= Hair
::shokumou
;
public void invokeMethod(int num)
{
method.invoke(this, num);
}
public void setMethod
(Method method
) {
this.method = method;
}
private static void shokumou(Hair hair, int num)
{
hair.count += num;
System.
out.
printf("%d本植毛しました、現在の髪の毛%d本%n", num, hair.
count); }
private static void datsumou(Hair hair, int num)
{
hair.count -= num;
System.
out.
printf("%d本脱毛しました、現在の髪の毛%d本%n", num, hair.
count); if (hair.count == 0)
{
System.
out.
println("つるっぱげです。"); }
}
}
{
void invoke(Hair hair, int num);
}
Y2xhc3MgSGFpcgp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgewogICAgICAgIEhhaXIgaGFpciA9IG5ldyBIYWlyKCk7CiAgICAgICAgaGFpci5pbnZva2VNZXRob2QoMTAwKTsKICAgICAgICBoYWlyLmludm9rZU1ldGhvZCgyMDApOwogICAgICAgIGhhaXIuc2V0TWV0aG9kKEhhaXI6OmRhdHN1bW91KTsKICAgICAgICBoYWlyLmludm9rZU1ldGhvZCg1MDApOwogICAgICAgIGhhaXIuaW52b2tlTWV0aG9kKDgwMCk7CiAgICAgICAgaGFpci5zZXRNZXRob2QoSGFpcjo6c2hva3Vtb3UpOwogICAgICAgIGhhaXIuaW52b2tlTWV0aG9kKDEpOwogICAgfQogICAgCiAgICBwcml2YXRlIGludCBjb3VudCA9IDEwMDA7CiAgICBwcml2YXRlIE1ldGhvZCBtZXRob2QgPSBIYWlyOjpzaG9rdW1vdTsKCiAgICBwdWJsaWMgdm9pZCBpbnZva2VNZXRob2QoaW50IG51bSkKICAgIHsKICAgICAgICBtZXRob2QuaW52b2tlKHRoaXMsIG51bSk7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0TWV0aG9kKE1ldGhvZCBtZXRob2QpCiAgICB7CiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzaG9rdW1vdShIYWlyIGhhaXIsIGludCBudW0pCiAgICB7CiAgICAgICAgaWYgKG51bSA8PSAwKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CiAgICAgICAgaGFpci5jb3VudCArPSBudW07CiAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIiVk5pys5qSN5q+b44GX44G+44GX44Gf44CB54++5Zyo44Gu6auq44Gu5q+bJWTmnKwlbiIsIG51bSwgaGFpci5jb3VudCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkYXRzdW1vdShIYWlyIGhhaXIsIGludCBudW0pCiAgICB7CiAgICAgICAgaWYgKG51bSA8PSAwIHx8IG51bSA+IGhhaXIuY291bnQpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKICAgICAgICBoYWlyLmNvdW50IC09IG51bTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiJWTmnKzohLHmr5vjgZfjgb7jgZfjgZ/jgIHnj77lnKjjga7pq6rjga7mr5slZOacrCVuIiwgbnVtLCBoYWlyLmNvdW50KTsKICAgICAgICBpZiAoaGFpci5jb3VudCA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCLjgaTjgovjgaPjgbHjgZLjgafjgZnjgIIiKTsKICAgICAgICB9CiAgICB9Cn0KCmludGVyZmFjZSBNZXRob2QKewogICAgdm9pZCBpbnZva2UoSGFpciBoYWlyLCBpbnQgbnVtKTsKfQo=