2017-06-14 54 views
2
IosPartner extends Partner 

AndroidPartner extends Partner 

我有這樣的代碼:如何發送<T>類泛型方法

Class<T> clazz = partnerStr.contains("itunes")? IosPartner.class : AndroidPartner.class; 

    Partner partnerToAdd = jsonUtility.toObject(partnerStr, clazz); 

public <T> T toObject(String json, Class<T> clazz) { 
     if (json == null) 
      return null; 
... 

我得到一個編譯錯誤:

Error:(64, 52) java: incompatible types: java.lang.Object cannot be converted to com.waze.sdkService.operations.uiDto.Partner 

應該如何我修正了我的代碼是否被泛化?

+1

'類 clazz所= partnerStr.contains( 「iTunes」 的)? IosPartner.class:AndroidPartner.class;'不應該編譯,但消息會不同,所以你有多個問題。您應該更新您的問題以包含[MCVE](https://stackoverflow.com/help/mcve),即使它不能編譯,但只要確保唯一的編譯錯誤是您所問的。如問題所述,我沒有足夠的信息來告訴你想要做什麼。 – Radiodef

+1

什麼是T級?它是另一個類型變量,與「jsonUtility」所期望的無關嗎? –

回答

6

你需要告訴編譯器要傳遞到toObject()Class對象不只是任何Class,但特別是一個代表擴展Partner類。要做到這一點,聲明其類型,像這樣:

Class<? extends Partner> clazz = partnerStr.contains("itunes") 
     ? IosPartner.class : AndroidPartner.class; 
+0

爲什麼'class clazz = partnerStr.contains(「itunes」) ? IosPartner.class:AndroidPartner.class;'拋出編譯錯誤?對於'partner partnerToAdd = jsonUtility.toObject(partnerStr,clazz);' –

0

這是簡單地使用T當你沒有的問題。由於這兩個類延伸Partner,只需使用Class<? extends Partner而不是Class<T>

編輯:@John Bollinger擊敗了我。