1 回答

TA貢獻1765條經驗 獲得超5個贊
問題是您Class在服務定義中使用原始類型。要解決此問題,您可以使用有界通配符類型 ?,如下所示:
class FruitServices {
private Map<Class<? extends Fruit>, FruitCheckService<? extends Fruit>> beansMap;
public FruitServices(List<FruitCheckService<? extends Fruit>> fruitCheckServices) {
beansMap = new HashMap<>();
fruitCheckServices
.forEach(
fruitCheckService -> {
Class<? extends Fruit> implementation = fruitCheckService.getImplementation();
beansMap.put(implementation, fruitCheckService);
}
);
}
public FruitCheckService<? extends Fruit> getFruitCheckService(Class<? extends Fruit> clazz) {
return beansMap.get(clazz);
}
}
對于課堂來說,BusinessService事情會變得更加棘手。首先,有必要制定compareVitamins一個通用方法來確保兩個水果屬于同一類型。但即使那樣,我也不相信你可以避免 unchecked cast from the result,getFruitCheckService因為,由于FruitServices必須處理不同類型水果的服務,你不能為 的返回值提供精確的類型參數getFruitCheckService。
class BusinessService {
private FruitServices fruitServices;
public <T extends Fruit> void compareVitamins(T one, T two) {
@SuppressWarnings("unchecked")
FruitCheckService<T> fruitCheckService =
(FruitCheckService<T>) fruitServices.getFruitCheckService(one.getClass());
List<String> result = fruitCheckService.compareVitaminsFromDifferentCountries(one, two);
}
}
添加回答
舉報