我正在尝试实现一个通用的消息系统。根据目标,类必须实现不同的接口(interface)才能由服务器正确反序列化。
为此我有这些接口(interface):
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,并且输入类必须是 IBasicInput 的实现,输出类必须是 IBasicOutput 的实现
实例化该类时
IMessage<IBasicInput,IBasicOutput> message = new Type1Message<BasicInput1,BasicOutput1>();
我收到此错误:
Type mismatch: cannot convert from Type1Message to IMessage
我不明白为什么。 Type1Message 实现了 IMessage,BasicInput 和 BasicOutput 都实现了签名接口(interface)。
但是,使用类而不是接口(interface)可以正常工作 IMessage 消息 = new Type1Message();
谢谢!!
Generics types are not inherited.要使其编译:
IMessage<? extends IBasicInput, ? extends IBasicOutput> message =
new Type1Message<BasicInput1, BasicOutput1>();
它有 restrictions ,所以我会这样写:
IMessage<IBasicInput, IBasicOutput> message = new Type1Message<>();
我是一名优秀的程序员,十分优秀!