[ 
https://issues.apache.org/jira/browse/PIVOT-670?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12932652#action_12932652
 ] 

Noel Grandin commented on PIVOT-670:
------------------------------------

Plus it would be a major pain to implement because every single subclass of 
wtk.Component would need to specify itself in the extends clause since Java 
doesn't support self types.

And we'd have to override the listener methods in every subclass to specify the 
correct return type.

And it would make certain types of generic programming, where you can define a 
listener object that operates on many different Component subclasses, much 
harder. 

> Generic types for listeners
> ---------------------------
>
>                 Key: PIVOT-670
>                 URL: https://issues.apache.org/jira/browse/PIVOT-670
>             Project: Pivot
>          Issue Type: Improvement
>         Environment: All
>            Reporter: Frédéric VERGEZ
>            Priority: Trivial
>
> Could listener interfaces have generic types ?
> This would allow to be type safe in methods, and avoid objects casting.
> For instance in a ComponentMouseListener:
> public interface ComponentMouseListener<T extends Component> {
>     /**
>      * Component mouse button listener adapter.
>      */
>     public static class Adapter implements ComponentMouseListener {
>         @Override
>         public boolean mouseMove(T component, int x, int y) {
>             return false;
>         }
>         @Override
>         public void mouseOver(T component) {
>         }
>         @Override
>         public void mouseOut(T component) {
>         }
>     }
>     /**
>      * Called when the mouse is moved over a component.
>      *
>      * @param component
>      * @param x
>      * @param y
>      *
>      * @return
>      * <tt>true</tt> to consume the event; <tt>false</tt> to allow it to
>      * propagate.
>      */
>     public boolean mouseMove(T component, int x, int y);
>     /**
>      * Called when the mouse enters a component.
>      *
>      * @param component
>      */
>     public void mouseOver(T component);
>     /**
>      * Called when the mouse exits a component.
>      *
>      * @param component
>      */
>     public void mouseOut(T component);
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to