我正在开发一个应用程序,用户可以在其中创建和编辑自己的测验。我有两个片段,EditQuizFragment
和AddQuizFragment
,其中一个扩展了另一个:
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
。这是什么原因呢?我以为演员阵容会奏效。任何帮助或建议,我们将不胜感激!
编辑:找到了一种解决方法。因此,我尝试投射的原因是因为我正在使用newInstance pattern for fragments。在
AddQuizFragment.java
中,我试图做这样的事情:public static AddQuizFragment newInstance() {
return (AddQuizFragment) EditQuizFragment.newInstance( /* arguments here */ );
}
这就是导致
ClassCastException
的原因。newInstance
所做的所有事情都是为片段设置参数束,使用片段将其与类分开。因此,我做了以下事情,而不是上面的事情:public static AddQuizFragment newInstance() {
EditQuizFragment editQuizFragment = EditQuizFragment.newInstance(/* arguments here */);
AddQuizFragment addQuizFragment = new AddQuizFragment();
addQuizFragment.setArguments(editQuizFragment.getArguments());
return addQuizFragment;
}
最佳答案
AddQuizFragment
是EditQuizFragment
,但是EditQuizFragment
不是AddQuizFragment
。
除非editQuizFragment
是实现AddQuizFragment
的对象,否则您根本无法做到这一点