Usa*_*kar 1 java generics type-parameter
我有一条消息 dto
class MyMessage<T>{
T payload;
String groupId;
}
Run Code Online (Sandbox Code Playgroud)
我有一个具有简单实现的接口
interface Sender<T>{
void sendMessage(T message);
}
class SenderService implements Sender<MyMessage>{
@Override
public void sendMessage(MyMessage message){...}
}
Run Code Online (Sandbox Code Playgroud)
现在,MyMessage 有一个原始类型,我希望 MyMessage 有一个类型参数,它将动态定义我的有效负载。如何实现?我已经尝试过以下方法。
class SenderService implements Sender<MyMessage>{
@Override
public <E> void sendMessage(MyMessage<E> message){...}
}
Run Code Online (Sandbox Code Playgroud)
但它会给出编译错误,因为该方法没有正确覆盖。我需要对抽象接口方法进行哪些更改才能使其正常工作?
Sender.sendMessage不是通用方法:您不能在该方法的实现上添加新类型变量:
class SenderService implements Sender<MyMessage<String>>{
@Override
public void sendMessage(MyMessage<String> message){...}
}
Run Code Online (Sandbox Code Playgroud)
如果您想要 aSenderService发送MyMessage任何类型 type 的 s,请使其实现通配符类型:
class SenderService implements Sender<MyMessage<?>>{
@Override
public void sendMessage(MyMessage<?> message){...}
}
Run Code Online (Sandbox Code Playgroud)
如果你想要 aSenderService发送MyMessage特定类型的 s,请使其SenderService通用:
class SenderService<E> implements Sender<MyMessage<E>>{
@Override
public void sendMessage(MyMessage<E> message){...}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |