From 25ec09eb1f1b83ade0d134c99c08779ebfd200fc Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Thu, 11 Jun 2015 22:40:21 +0100 Subject: [PATCH] Reroute input objects by finding appropriate handlers using reflection --- java/base/src/main/java/base/work/Listen.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/java/base/src/main/java/base/work/Listen.java b/java/base/src/main/java/base/work/Listen.java index 7b97fd9..d839623 100644 --- a/java/base/src/main/java/base/work/Listen.java +++ b/java/base/src/main/java/base/work/Listen.java @@ -1,5 +1,8 @@ package base.work; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; @@ -57,5 +60,15 @@ public abstract class Listen extends Work { } } - public void input(E element) {} + public void input(Object object) { + MethodType methodType = MethodType.methodType(void.class, object.getClass()); + MethodHandles.Lookup lookup = MethodHandles.lookup(); + MethodHandle methodHandle; + try { + methodHandle = lookup.findVirtual(getClass(), "input", methodType); + methodHandle.invoke(this, object); + } catch (Throwable e) { + logger.error("", e); + } + } }