4 回答

TA貢獻1810條經驗 獲得超4個贊
解決方案是在此處使用Tas 類型,然后您可以刪除您的演員表:
// before:
// SonarContainPaging sonarObject = getSonarObjectFromPage(url, uriVariables, klass, page);
// after:
T sonarObject = getSonarObjectFromPage(url, uriVariables, klass, page);
由于根據您的評論,getSonarObjectFromPagereturns T,T您傳遞給它的類在哪里:
<T extends SonarContainPaging> T getSonarObjectFromPage(String url, Map<String, Object> uriVariables, Class<T> klass, List<T> page)
在這種情況下,您傳遞了 class klass,它是 a Class<T>,因此getSonarObjectFromPage也會返回 a T。

TA貢獻1841條經驗 獲得超3個贊
通常有兩種方法可以避免此警告。
首先是將對象轉換為類:
public static <T> T castMe(Class<T> clazz, Object object) {
return clazz.cast(object);
}
第二個是用注釋抑制警告。這是一種不確定的方式,但是當您絕對知道可以將特定對象強制轉換為相關泛型類型時,可以安全地使用它:
@SuppressWarnings("unchecked")
public static <T> T castMe(Class<T> clazz, Object object) {
return (T) object;
}

TA貢獻1906條經驗 獲得超10個贊
正如 Sweeper 在他們的回答中提到的那樣,您只需將類型更改sonarObject為T:
T sonarObject;
您還可以通過使用do-while減少冗余的循環來改進代碼:
private <T extends SonarContainPaging> void getSonarListContainingPaging(String url, Map<String, Object> uriVariables, Class<T> klass, List<T> list) {
int page = 1;
T sonarObject;
do {
sonarObject = getSonarObjectFromPage(url, uriVariables, klass, page);
list.add(sonarObject);
} while (sonarObject.canContinueLooping(++page));
}

TA貢獻1873條經驗 獲得超9個贊
您可以使用強制轉換方法。 https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#cast-java.lang.Object-
list.add(klass.cast(sonarObject));
添加回答
舉報