Late binding for lamba parameters?

Zhong Yu zhong.j.yu at
Fri Sep 13 11:10:28 PDT 2013

We could build a run time dispatcher, for example

public class Dispatcher
    <T> void register(Class<T> type, Consumer<T> handler)...
    void call(Object obj)...


Dispatcher processor = new Dispatcher();

processor.register(Elem1.class, elem1->{

processor.register(Elem2.class, elem2->{



the syntax of registration is pretty close to method declaration syntax.

The dispatcher requires some effort to mimic static method invocation
semantics, e.g. applicable through subtyping; selecting the most
specific method. But it is far easier since the dispatcher
doesn't/cannot care about generic stuff.

Zhong Yu

On Fri, Sep 13, 2013 at 4:41 AM, Millies, Sebastian
<Sebastian.Millies at> wrote:
> Hello there,
> as Project Lambda has introduced some elements of laziness into Java, I
> wondered about the following question:
> Is it possible to have methods in a lambda body dispatch on an argument type
> determined at run time? Or in otherwords, can the type inference for the
> lambda parameter be delayed by using some sort of type variable?
> Example:
> class AbstractElem {}
> class ConcreteElem1 extends AbstractElem {}
> class ConcreteElem2 extends AbstractElem {}
> void process() {
>   List<? extends AbstractElem> list = new ArrayList<>();
>   list.forEach( e -> processConcreteElem(e) );
> }
> void processConcreteElem(ConcreteElem1 e) {...}
> void processConcreteElem(ConcreteElem2 e) {...}
> This would be really useful, not having to do double-dispatch through the
> Visitor pattern, but it seems it's still impossible, right? Has this been discussed
> at all?
> n  Sebastian
> Software AG - Sitz/Registered office: Uhlandstra?e 12, 64297 Darmstadt, Germany - Registergericht/Commercial register: Darmstadt HRB 1562 - Vorstand/Management Board: Karl-Heinz Streibich (Vorsitzender/Chairman), Dr. Wolfram Jost, Arnd Zinnhardt; - Aufsichtsratsvorsitzender/Chairman of the Supervisory Board: Dr. Andreas Bereczky -

More information about the lambda-dev mailing list