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

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

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

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

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

Выше пример работает нормально. Но компилятор не позволит мне реализовать EventHandler несколько раз из-за чрезвычайно разочаровывает Type Erasure.

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

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

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

  1. Почему Java не поддерживает стирание типов? IIRC это как-то связано с совместимостью с более ранними версиями Java, верно?

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

  1. Есть ли какой-то "мод"/"расширение" (из-за отсутствия лучшего слова )или языки программирования, позволяющие обойти Type Erasure? Поскольку я не использую более старые версии Java, мне все равно, совместим ли мой код со старым кодом.

  2. Существуют ли какие-либо обходные пути в языке Java, которые можно использовать для обхода Type Erasure?

  3. Если нет, то какие альтернативные способы кодирования обработки событий в моей программе упрощают компилятор?

5
задан user1299784 15 April 2012 в 23:18
поделиться