Тип Erasure поднимает свою уродливую голову, как обойти?

Итак, у меня есть этот интерфейс

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

и я хочу получить классы для него, которые обрабатывают события, вот так:

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

Приведенный выше пример работает нормально. Но компилятор не позволил мне реализовать EventHandler несколько раз из-за очень расстраивает тип 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>

Несколько вопросов ...

Why does Java not allow Type Erasure? IIRC it is something to do with being compatible with earlier versions of Java, correct?

РЕДАКТИРОВАТЬ: я имею в виду, почему у Java есть Erasure типа (было наоборот)

Is there any sort of "mod"/"extension" (for lack of a better word) or programming languages that allow me to get around Type Erasure? As I am not using older versions of Java I don't care about my code being compatible with older code.

Are there any workarounds, within the Java language, that I can use to get around Type Erasure?

If no, what are some alternate ways to code event handling in my program that keeps the compiler happy?

Ответы на вопрос(4)

Ваш ответ на вопрос