Java android:ClassCastException在尝试投射片段时
我正在开发一个应用程序,用户可以在其中创建和编辑自己的测验。我有两个片段,Java android:ClassCastException在尝试投射片段时,java,android,oop,android-fragments,casting,Java,Android,Oop,Android Fragments,Casting,我正在开发一个应用程序,用户可以在其中创建和编辑自己的测验。我有两个片段,EditQuizFragment和AddQuizFragment,其中一个扩展了另一个: public class EditQuizFragment extends Fragment public class AddQuizFragment extends EditQuizFragment 我想将AddQuizFragment(子类)强制转换到EditQuizFragment上 当我尝试运行以下命令时,会得到一个Clas
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
。这是什么原因?我想演员阵容会有用的
非常感谢您的任何帮助或建议
编辑:找到了解决方法。所以我试着投的原因是因为我用的是。在
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
是一个实现AddQuizFragmentAddQuizFragment
是一个editQuizFragment
,但editQuizFragment
不是一个AddQuizFragment
的对象,否则您就不能这样做
除非editQuizFragment
是一个实现AddQuizFragment
的对象,从同样的意义上说,所有的正方形都是矩形,但不是所有的矩形都是正方形,所有的AddQuizFragment
都是editQuizFragment
,但不是相反。您有new EditQuizFragment()
,它不会创建AddQuizFragment
@TavianBarnes请参阅我对Kiskae回答的答复,从同样的意义上讲,所有的正方形都是矩形,但并非所有的矩形都是正方形,所有AddQuizFragment
都是EditQuizFragments
,但并非相反。您有new EditQuizFragment()
,它不会创建AddQuizFragment
@TavianBarnes请参阅我对Kiskae答案的答复