Когда я пишу метод таким образом. Я получаю это предупреждение:
BaseEvent — это необработанный тип. Ссылки на универсальный тип BaseEvent должны быть параметризованы.
@Override
public <T extends BaseEvent> void actionPerformed(T event) { ... }
Код по-прежнему работает нормально, хотя предупреждающий знак раздражает. Когда я пишу код таким образом, предупреждение исчезает.
@Override
public <T> void actionPerformed(BaseEvent<T> event) { ... }
В предыдущем сообщении это не гарантирует, что это подкласс BaseEvent. Итак, я снова изменил его:
@Override
public <T extends EventObject> void actionPerformed(BaseEvent<T> event) { ... }
@Override
public <T extends BaseEvent<T>> void actionPerformed(BaseEvent<T> event) { ... }
Класс BaseEvent — это созданный мной класс, который расширяет EventOBject.
public abstract class BaseEvent<T> extends EventObject
{
private String eventType;
// Constructor
public BaseEvent(Object source, String type)
{
super(source);
eventType = type;
}
public String getEventType() { return eventType; }
}
Все методы вроде работают нормально. Но мне было интересно, какое решение лучше.
public void actionPerformed(BaseEvent event) { ... }
, работает точно так же, как и то, что есть у него в его первом фрагменте кодаpublic <T extends BaseEvent> void actionPerformed(T event) { ... }
. Оба принимают любой экземплярBaseEvent
, который, конечно же, включает подклассыBaseEvent
. 07.12.2012