我有一條訊息
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){...}
}
但它給出了編譯錯誤,因為該方法沒有被正確覆寫。我需要在抽象介面方法中進行哪些更改才能使其正常作業?
uj5u.com熱心網友回復:
Sender.sendMessage 不是通用方法:您不能在該方法的實作上添加新型別變數:
class SenderService implements Sender<MyMessage<String>>{
@Override
public void sendMessage(MyMessage<String> message){...}
}
如果您想要SenderService發送MyMessage任何型別型別的 s,請使其實作通配符型別:
class SenderService implements Sender<MyMessage<?>>{
@Override
public void sendMessage(MyMessage<?> message){...}
}
如果您想要SenderService發送MyMessage特定型別的 s,請使用SenderService泛型:
class SenderService<E> implements Sender<MyMessage<E>>{
@Override
public void sendMessage(MyMessage<E> message){...}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/410122.html
標籤:
