當我用這種方法編寫方法時。我收到此警告:Java泛型和原始類型
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 void actionPerformed(T event){...}'。兩者都採用「BaseEvent」的任何實例,其中當然包括「BaseEvent」的子類。 –
newacct
嗨Dims,謝謝你的解釋。我從BaseEvent中取出了類型參數。並感謝您澄清如何在需要時使用它。 – Laani