Тип 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?