因此,我有一个GeneralTemplate类和一个扩展GeneralTemplate的Exercise类。
从我包含的GeneralTemplate代码中可以看出,扩展它的每个类(有几个类)都包含一个ArrayList
当我到达这条线...
Exercise chosenExercise = (Exercise) FitnessApp.routineList.get(chosenRoutinePosition).getItem(chosenWorkoutPosition).getItem(chosenExercisePosition);
我收到以下错误
ClassCastExceptionjava.lang.ClassCastException: com.karibastudios.gymtemplates.GeneralTemplate cannot be cast to com.karibastudios.gymtemplates.Exercise
我不明白为什么会这样,因为Exercise是GeneralTemplate的子类?
GeneralTemplate代码:
public class GeneralTemplate
{
private String name;
private ArrayList <GeneralTemplate> items; // Generic items list
// Super constructor for all subclasses
public GeneralTemplate(String name)
{
this.setName(name);
items = new ArrayList<GeneralTemplate>();
}
// Only sets will differ
public void addItem(String newName)
{
items.add(new GeneralTemplate(newName));
}
// Remove item at position
public void removeItem(int position)
{
if (items.size() > 0 && position <= items.size())
items.remove(position);
}
// Remove all items
public void removeItems()
{
items.clear();
}
/* ****************** GETTERS AND SETTERS START ********************/
// Get item
public GeneralTemplate getItem(int position)
{
return items.get(position);
}
// Set list of objects e.g Routines, Workouts, Exercises
public void setItems(ArrayList <GeneralTemplate> items)
{
this.items = items;
}
// Return item list
public ArrayList <GeneralTemplate> getItems()
{
return items;
}
// Return name
public String getName()
{
return name;
}
// Set name
public void setName(String name)
{
this.name = name;
}
/* ****************** GETTERS AND SETTERS END ********************/
}
尝试强制转换GeneralTemplate行使以调用方法的异常代码
chosenRoutinePosition = getIntent().getIntExtra("chosen_routine", 0);
chosenWorkoutPosition = getIntent().getIntExtra("chosen_workout", 0);
chosenExercisePosition = getIntent().getIntExtra("chosen_workout", 0);
// Navigates through the Routine List and gets the chosen routine
chosenExercise = (Exercise)FitnessApp.routineList.get(chosenRoutinePosition).getItem(chosenWorkoutPosition).getItem(chosenExercisePosition);
Exercise类非常简单,并使用其他一些方法扩展了GeneralTemplate
这是一个绊脚石,任何帮助都将是惊人的。
干杯
最佳答案
ClassCastExceptionjava.lang.ClassCastException: com.karibastudios.gymtemplates.GeneralTemplate cannot be cast to com.karibastudios.gymtemplates.Exercise
在Java中,您只能沿一个方向进行投射。例如:ListView是一个View,但并非所有View都是ListView(它可以是Button,RelativeLayout等)。
因此,您可以从“练习”转到“ GeneralTemplate”,但不能相反。