首先,对于模糊的标题感到抱歉,但我真的想不出怎么说这个,所以如果你想到的话,请编辑一个更好的标题。
我有一个帮助器片段类(MasterFragment
),它将永远不会被使用,它将永远被扩展,并且在其中有这种方法。
public static MasterFragment newInstance(Bundle bundle) {
MasterFragment masterFragment = new MasterFragment();
masterFragment.setArguments(bundle);
return masterFragment;
}
当我扩展它时,让我们调用类ExtendedMasterFragment
,我可以让newInstance方法返回ExtendedMasterFragment
而不是MasterFragment
的实例吗?
public static MasterFragment newInstance(Bundle bundle, MasterFragment masterFragment) {
masterFragment.setArguments(bundle);
return masterFragment;
}
并称之为
return ListExampleFragment.newInstance(null, new ListExampleFragment());
但是如果可能的话,我宁愿让newInstance在课堂上工作
答案 0 :(得分:0)
您绝对可以使用newInstance
方法返回子类的实例:
public enum Type { THIS, THAT, OTHER; }
public static MasterFragment newInstance(Bundle bundle, Type type) {
MasterFragment frag;
switch (type) {
case THIS: frag = new ThisFrag(); break;
// ...
}
frag.setArguments(bundle);
return frag;
}
另一方面,工厂方法的返回类型是MasterFragment。如果您需要实例的实际类型,则必须进行转换(ewwwieee)。
你也可以这样做,虽然这真的很难看:
public static <T extends MasterFragment> T newInstance(Bundle bundle, Type type) {
MasterFragment frag;
switch (type) {
case THIS: frag = new ThisFrag(); break;
// ...
}
frag.setArguments(bundle);
return (T) frag; // type conversion warning here.
}
如果您使用泛型,这将起作用:
ThisFrag frag = newInstance(new Bundle(), Type.THIS);
育。对不起,我提到了。