我已經定義了這個類:
public class ActorMapper implements RecordMapper<ActorRecord, ActorModel>
在其他地方,在具有此簽名的函式中:
public <R extends Record, E> RecordMapper<R, E>
provide(RecordType<R> recordType, Class<? extends E> clazz)
我嘗試回傳新的 ActorMapper(),但 javac 抱怨:
incompatible types: com.steeplesoft.jooq.codegen.mapper.ActorMapper cannot be
converted to org.jooq.RecordMapper<R,E>
我可以投射它,它作業正常,但為什么不能編譯。有人可以幫我嗎?:)
uj5u.com熱心網友回復:
您提到的簽名來自RecordMapperProvider,一個通用 SPI,允許為對提供自定義RecordMapper<R, E>實體(RecordType<R>, Class<E>)。此方法的泛型主要用于檔案目的,這意味著無論您作為輸入型別接收什么,都必須在輸出映射器函式中提供支持。
沒有辦法以型別安全的方式捕獲您在運行時收到的實際型別,因為您的RecordMapperProvider實作必須為每個輸入對決定它是否可以提供 a RecordMapper,或者null如果不能提供則回傳,并且它可以RecordMapper為多個回傳相同的輸入對,如果RecordMapper有足夠的能力。
因此,您將不得不進行不安全的強制轉換或使用原始型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/448686.html
下一篇:在Java中替換部分字串的問題
