Я хочу использовать родовой тип, который расширяет класс BoostItem до его базового класса BoostItem, а затем вызывает его конструктор (с целым числом). Как я могу это достичь? T всегда должен расширять BoostItem, поэтому всегда должно быть возможно передать аргумент boostFood классу BoostItem, правильно? Что мне здесь не хватает ..?Java Generics Кастинг с расширенным типом
public <T extends BoostItem> void addBoostFood(Class<T> boostFood){
try {
// How to cast boostFood to BoostItem
// Call constructor of BoostItem with Parameter int
((BoostItem)boostFood).newInstance(5); //Doesnt work
} catch (Exception e){
e.printStackTrace();
}
}
------------- EDIT Результирующая Исходный код (выглядит некрасиво, и я не думаю, что я буду использовать его как это слишком медленно и unflexible)
public <T extends BoostItem> void addBoostFood(Class<T> boostFood){
try {
Constructor[] ctors = boostFood.getDeclaredConstructors();
for(Constructor c : ctors) {
Type[] types = c.getGenericParameterTypes();
boolean isRightCon = true;
for(Type t : types){
if(t != Integer.class)
isRightCon = false;
}
if(isRightCon)
gFoodBoosterList.add((BoostItem) c.newInstance(new Integer(5)));
}
}catch (Exception e){
e.printStackTrace();
}
}