/* 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
{
interface Task {
void doSomething();
}
interface Factory {
Task makeTask
(String taskDescription
); }
static Map
<String, Factory
> taskMap
= new HashMap
<>();
static {
taskMap.put("sayHello", new Factory() {
@Override
public Task makeTask
(String taskPayload
) { return new Task() {
@Override
public void doSomething() {
System.
out.
println("Hello " + taskPayload
); }
};
}
});
}
Factory factory = taskMap.get(taskName);
if (factory == null) {
System.
out.
println("Unknown task: " + taskName
); return;
}
Task task = factory.makeTask(taskPayload);
// execute task somewhere
task.doSomething();
}
public static void main
(String[] args
) { onTask("sayHello", "qingl97");
onTask("sayGoodbye", "qingl97");
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCWludGVyZmFjZSBUYXNrIHsKCQl2b2lkIGRvU29tZXRoaW5nKCk7Cgl9CgoJaW50ZXJmYWNlIEZhY3RvcnkgewoJCVRhc2sgbWFrZVRhc2soU3RyaW5nIHRhc2tEZXNjcmlwdGlvbik7Cgl9CgoJc3RhdGljIE1hcDxTdHJpbmcsIEZhY3Rvcnk+IHRhc2tNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CgoJc3RhdGljIHsKCQl0YXNrTWFwLnB1dCgic2F5SGVsbG8iLCBuZXcgRmFjdG9yeSgpIHsKCQkJQE92ZXJyaWRlCgkJCXB1YmxpYyBUYXNrIG1ha2VUYXNrKFN0cmluZyB0YXNrUGF5bG9hZCkgewoJCQkJcmV0dXJuIG5ldyBUYXNrKCkgewoJCQkJCUBPdmVycmlkZQoJCQkJCXB1YmxpYyB2b2lkIGRvU29tZXRoaW5nKCkgewoJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvICIgKyB0YXNrUGF5bG9hZCk7CgkJCQkJfQoJCQkJfTsKCQkJfQoJCX0pOwoJfQoKCXN0YXRpYyB2b2lkIG9uVGFzayhTdHJpbmcgdGFza05hbWUsIFN0cmluZyB0YXNrUGF5bG9hZCkgewoJCUZhY3RvcnkgZmFjdG9yeSA9IHRhc2tNYXAuZ2V0KHRhc2tOYW1lKTsKCQlpZiAoZmFjdG9yeSA9PSBudWxsKSB7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiVW5rbm93biB0YXNrOiAiICsgdGFza05hbWUpOwoJCQlyZXR1cm47CgkJfQoJCVRhc2sgdGFzayA9IGZhY3RvcnkubWFrZVRhc2sodGFza1BheWxvYWQpOwoKCQkvLyBleGVjdXRlIHRhc2sgc29tZXdoZXJlCgkJdGFzay5kb1NvbWV0aGluZygpOwoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCQlvblRhc2soInNheUhlbGxvIiwgInFpbmdsOTciKTsKCQlvblRhc2soInNheUdvb2RieWUiLCAicWluZ2w5NyIpOwoJfQp9