如何在 java 泛型中的类型参数内定义类型参数

How to define a type parameter inside a type parameter in java generics

我有消息dto

class MyMessage<T>{
  T payload;
  String groupId;
}    

我有一个实现简单的接口

interface Sender<T>{
    void sendMessage(T message);
}

class SenderService implements Sender<MyMessage>{
    @Override
    public void sendMessage(MyMessage message){...}
}

现在 MyMessage 有一个原始类型,我希望 MyMessage 也有一个类型参数,它将动态定义我的有效负载。如何实现?我尝试了以下方法。

class SenderService implements Sender<MyMessage>{
    @Override
    public <E> void sendMessage(MyMessage<E> message){...}
}

但由于未正确重写该方法,它给出了编译错误。我需要在我的抽象接口方法中更改什么才能使其工作?

Sender.sendMessage 不是通用方法:您不能在该方法的实现上添加新类型变量:

class SenderService implements Sender<MyMessage<String>>{
    @Override
    public void sendMessage(MyMessage<String> message){...}
}

如果您想要 SenderService 发送任何类型的 MyMessages,请使其实现通配符类型:

class SenderService implements Sender<MyMessage<?>>{
    @Override
    public void sendMessage(MyMessage<?> message){...}
}

如果您想要 SenderService 发送特定类型的 MyMessage,请使 SenderService 通用:

class SenderService<E> implements Sender<MyMessage<E>>{
    @Override
    public void sendMessage(MyMessage<E> message){...}
}