0
我有這樣的代碼。 Payload是Java對象。Java泛型捕獲
DSRecommendations和LsRecommendations延伸RecEntry
objectMapper和TypeReference從傑克遜和RecEntry是我自己的類
有效載荷只是一個recEntry的列表
public enum RecSourceEnum {
CSELL(DSRecommendations.class),
LS(LsRecommendations.class);
private final Class<? extends RecEntry> recEntry;
<T extends RecEntry> RecSourceEnum(Class<T> recEntry) {
this.recEntry = recEntry;
}
public Class<? extends RecEntry> getRecEntry() {
return recEntry;
}
}
String source = "CSELL";
Class<? extends RecEntry> clazz = RecSourceEnum.valueOf(source.toUpperCase()).getRecEntry();
List<RecEntry> recommEntryList = convertFromObj(payload, clazz);
private static <T extends RecEntry> List<T> convertFromObj(Object payload, Class<T> clazz) throws IOException {
TypeReference<List<T>> mapType = new TypeReference<List<T>>() {};
return objectMapper.convertValue(payload, mapType);
}
當我嘗試運行此代碼。我得到這個錯誤。
Wrong 2nd argument type. Found: 'java.lang.Class<? extends entry.RecEntry>', required: 'java.lang.Class<T>' less...
convertFromObj
(Object, java.lang.Class<T>)
in BManagerImpl cannot be applied to
(Object, java.lang.Class<capture<? extends entry.RecEntry>>)
reason: Incompatible equality constraint: RecEntry and capture of ? extends RecEntry
如何解決這個問題?
你有一個列表'',你想一個'列表'分配給它。在X和Y之間存在繼承的事實並不意味着在「列表」和「列表」之間存在繼承關係。 –
RealSkeptic