如何正确创建一个扩展Java中通用接口的有界泛型类

时间:2016-09-10 16:49:10

标签: java generics

我试图实现通用消息传递系统。根据目标,类必须实现不同的接口,以便服务器正确地反序列化。

为此我有这些接口:

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();

谢谢!

1 个答案:

答案 0 :(得分:0)

Generics types are not inherited.要编译它:

IMessage<? extends IBasicInput, ? extends IBasicOutput> message =
    new Type1Message<BasicInput1, BasicOutput1>();

它有restrictions,所以我写得像:

IMessage<IBasicInput, IBasicOutput> message = new Type1Message<>();