Typ Erasure podnosi swoją brzydką głowę, jak ominąć?

Więc mam ten interfejs

<code>public interface EventHandler<E extends EventObject>
{   
    public void handleEvent(E event);
}
</code>

i chcę wyprowadzić klasy, które obsługują zdarzenia, w ten sposób:

<code>public class WorkingHandler implements EventHandler<MouseEvent>
{
    public void handleEvent(MouseEvent event)
    {
        //handle event
    }
}
</code>

Powyższy przykład działa dobrze. Ale kompilator nie pozwoli mi zaimplementować EventHandler wiele razy, ze względu na niezwykle frustrującą funkcję Type Erasure.

<code>public class NotWorkingHandler implements EventHandler<MouseEvent>, EventHandler<KeyEvent>
{
    public void handleEvent(MouseEvent event)
    {
        //handle mouse event
    }

    public void handleEvent(KeyEvent event)
    {
        //handle key event
    }
}
</code>

Kilka pytań...

Dlaczego Java nie zezwala na wymazywanie typu? IIRC ma coś wspólnego z kompatybilnością z wcześniejszymi wersjami Java, prawda?

EDYCJA: Mam na myśli, dlaczego Java ma Skasowanie Typu (miało to na odwrót)

Czy istnieje jakikolwiek „mod” / „rozszerzenie” (z braku lepszego słowa) lub języków programowania, które pozwalają mi ominąć Type Erasure? Ponieważ nie używam starszych wersji Java, nie obchodzi mnie, że mój kod jest zgodny ze starszym kodem.

Czy są jakieś obejścia w języku Java, których mogę użyć do obejścia narzędzia Type Erasure?

Jeśli nie, jakie są alternatywne sposoby kodowania obsługi zdarzeń w moim programie, które utrzymują kompilator szczęśliwy?

questionAnswers(4)

yourAnswerToTheQuestion