./java/generics-with-value-parameters.txt

download original
//if they were supported (they're not, are they?), they could be used
//  e.g. like this:

enum EventType{MOUSE_MOVED, MOUSE_CLICKED, KEY_PRESSED};

interface <value EventType eventType> Listener { }

interface MouseMovedListener extends Listener<MOUSE_MOVED> { void mouseMoved(...); }
interface MouseClickedListener extends Listener<MOUSE_CLICKED> { void mouseClicked(...); }
interface KeyPressedListener extends Listener<KEY_PRESSED> { void keyPressed(...); }


class MyComponent {
    void <value EventType eventType> registerListener(eventType type, Listener<eventType> listener) {
        .....
    }
}



usage e.g.

MyComponent myComponent = ....;
myComponent.registerListener(MOUSE_CLICKED, new MouseClickedListener() {.....});

compiler checks that 2nd argument to registerListener matches the 1st argument.



...or maybe even just:

class MyComponent {
    void <value EventType eventType> registerListener(Listener<eventType> listener) {
        .....
    }
}

MyComponent myComponent = ....;
myComponent.registerListener<MOUSE_CLICKED>(new MouseClickedListener() {.....});




no?

  
back to java

(C) 1998-2017 Olaf Klischat <olaf.klischat@gmail.com>