我试图实现通用消息传递系统。根据目标,类必须实现不同的接口,以便服务器正确地反序列化。
为此我有这些接口:
public interface IBasicInput
public interface IBasicOutput
public interface IMessage <I,O>
类实现:
public class BasicInput1 implements IBasicInput
public class BasicOutput1 implements IBasicOutput
public class Type1Message<I extends IBasicInput,O extends IBasicOutput> implements IMessage<I, O> {
/**
* @Override from IMessage
*/
public void setIput(I input) {
}
/**
* @Override from IMessage
*/
public O getResult() {
return null;
}
}
此消息的目标是拥有一个实现iMessage的Message,而Input类必须是IBasicInput的实现,输出是IBasicOutput的实现
实例化此类
IMessage<IBasicInput,IBasicOutput> message = new Type1Message<BasicInput1,BasicOutput1>();
我收到了这个错误:
类型不匹配:无法转换 Type1Message为 消息对象
我不明白为什么。 Type1Message实现了IMessage,BasicInput和BasicOutput都实现了签名接口。
但是,使用该类而不是界面工作正常 IMessage message = new Type1Message();
谢谢!
答案 0 :(得分:0)
Generics types are not inherited.要编译它:
IMessage<? extends IBasicInput, ? extends IBasicOutput> message =
new Type1Message<BasicInput1, BasicOutput1>();
它有restrictions,所以我写得像:
IMessage<IBasicInput, IBasicOutput> message = new Type1Message<>();