- /* 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