Java 如何从多个扩展泛型接口继承?
我有几门课是这样的:Java 如何从多个扩展泛型接口继承?,java,generics,inheritance,Java,Generics,Inheritance,我有几门课是这样的: public class XMLStatusMessage extends XMLMessage {} public abstract class XMLMessage implements IMessage {} public interface IMessageListener { public void onMessage( IMessage message ); } public interface XMLMessageListener <T ex
public class XMLStatusMessage extends XMLMessage
{}
public abstract class XMLMessage implements IMessage
{}
public interface IMessageListener
{
public void onMessage( IMessage message );
}
public interface XMLMessageListener <T extends XMLMessage> extends
IMessageListener
{
public void onMessage( T message );
}
public interface XMLStatusMessageListener extends
XMLMessageListener <XMLStatusMessage>
{
@Override
public void onMessage( XMLStatusMessage message );
}
我的问题是AStatusHandler不会编译,因为我没有实现publicvoidonMessage(IMessage)。我不明白为什么还要实现onMessage(IMessage),因为它已经实现了onMessage(XMLStatusMessage),而XMLStatusMessage是一个IMessage。这个问题有简单的解决办法吗?我以前遇到过这种情况,但这个问题并没有一个很好的解决办法 在您的情况下,IMessageListener定义onMessage来接收IMessage 您的XMLMessageListener扩展了它,它定义onMessage以至少接收一条XMLMessage
即使您忽略了泛型,Java也不允许您在方法的重写版本中更改参数类型。因此,这两个方法被视为重载,您的代码不会编译,因为您没有接收IMessage的版本的定义。XMLStatusMessage是IMessage,但不是相反。如果IMessage还有另一个子类,比如SMTPStatusMessage,那么:
new XMLMessageListener().onMessage(new SomeOtherMessage());
??如果您认为这是不允许的,那么就不应该实现IMessageListener。正如其他答案所指出的,您将只能在AStatusHandler中处理XMLStatusMessage消息,但我猜这就是您想要的?重新声明你的界面如下,我相信你会得到你想要的
public interface IMessageListener<T extends IMessage> {
public void onMessage(T message);
}
public interface XMLMessageListener<T extends XMLMessage> extends IMessageListener<T> {
}
public interface XMLStatusMessageListener extends XMLMessageListener<XMLStatusMessage> {
}
希望这是你想要的,并且对你有帮助
问候
弯曲的
public interface IMessageListener<T extends IMessage> {
public void onMessage(T message);
}
public interface XMLMessageListener<T extends XMLMessage> extends IMessageListener<T> {
}
public interface XMLStatusMessageListener extends XMLMessageListener<XMLStatusMessage> {
}
public class AStatusHandler implements XMLStatusMessageListener {
@Override
public void onMessage(final XMLStatusMessage message) {
// TODO Auto-generated method stub
}
}