当我用这种方法编写方法时。我收到此警告: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