android: ClassCastException当尝试转换片段



我正在开发一个应用程序,用户可以创建和编辑自己的测验。我有两个片段,EditQuizFragmentAddQuizFragment,其中一个扩展了另一个:

public class EditQuizFragment extends Fragment
public class AddQuizFragment extends EditQuizFragment

我想将AddQuizFragment(子类)转换为EditQuizFragment

当我尝试运行以下命令时,我得到一个ClassCastException:

EditQuizFragment editQuizFragment = new EditQuizFragment();
AddQuizFragment addQuizFragment = (AddQuizFragment) editQuizFragment;

错误信息如下:

Caused by: java.lang.ClassCastException: com.quizmaker.fragments.EditQuizFragment cannot be cast to com.quizmaker.fragments.AddQuizFragment

我试过将导致错误的代码移动到其他类,文件等,但仍然得到相同的ClassCastException。这是什么原因呢?

任何帮助或建议都是非常感谢的!

EDIT:找到一个解决方案。所以我尝试强制转换的原因是因为我正在为片段使用newInstance模式。在AddQuizFragment.java我试图做这样的事情:

public static AddQuizFragment newInstance() {
    return (AddQuizFragment) EditQuizFragment.newInstance( /* arguments here */ );
}

这就是导致ClassCastException .

所有newInstance所做的是为fragment设置参数束,使用fragment将其从类中抽象出来。因此,我没有使用上面的代码,而是使用了下面的代码:

public static AddQuizFragment newInstance() {
    EditQuizFragment editQuizFragment = EditQuizFragment.newInstance(/* arguments here */);
    AddQuizFragment addQuizFragment = new AddQuizFragment();
    addQuizFragment.setArguments(editQuizFragment.getArguments());
    return addQuizFragment;
}

AddQuizFragmentEditQuizFragment,但EditQuizFragment不是AddQuizFragment

除非editQuizFragment是一个实现AddQuizFragment的对象

最新更新