gpt4 book ai didi

Java/Android - GettingClassCast 异常将基类转换为子类以调用子类方法

转载 作者:行者123 更新时间:2023-12-01 14:43:12 25 4
gpt4 key购买 nike

所以我有一个 GeneralTemplate 类和一个扩展 GeneralTemplate 的练习类。

从我包含的 GeneralTemplate 代码中可以看出,扩展它的每个类(其中有多个)都包含一个 ArrayList

当我到达这一行时...

Exercise chosenExercise = (Exercise) FitnessApp.routineList.get(chosenRoutinePosition).getItem(chosenWorkoutPosition).getItem(chosenExercisePosition);

我收到以下错误ClassCastExceptionjava.lang.ClassCastException:com.karibastudios.gymtemplates.GeneralTemplate无法转换为com.karibastudios.gymtemplates.Exercise

我不明白为什么这是因为Exercise是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 等)。

因此您可以从练习转到通用模板,但反之则不然。

关于Java/Android - GettingClassCast 异常将基类转换为子类以调用子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15731374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com