我在Android應用程序的工作,我得到了這樣的情況:實施某種「靜態抽象繼承」方法
-GenericOrderDetailFragment,擴展片段的抽象類。
- 這個類的三個非抽象「兒子」:LinesFragment,HeaderFragment,NoteFragment。
在三個兒子中有很多方法是相同的,所以我在抽象類上聲明,這就是它存在的原因。
我被一個特別卡住了。到現在爲止,我把這個方法兒子裏面,它的偉大工程:
public class LinesFragment extends GenericOrderDetailFragment {
[...]
public static LinesFragment newInstance(Order o) {
LinesFragment fragment = new LinesFragment();
putSerializable(o, fragment);
return fragment;
}
[...]
}
這種方法是在所有的兒子一樣,除了返回類型:LinesFragment應該返回LinesFragment例如,HeaderFragment應該返回HeaderFragment istance ......我想把這個作爲父類一mustoverride,但我不能這樣做,因爲:
只要把
public static GenericOrderDetailFragment newInstance(Order o) {
GenericOrderDetailFragment fragment = new GenericOrderDetailFragment();
putSerializable(o, fragment);
return fragment;
}
方法不起作用,只是因爲我不能istantiate一個GenericOrderDetailFragment(這是絕對的道)。我不能istantiate一個這 .getClass()項,「原因沒有此:該方法是靜態的!我不能聲明一個「靜態抽象」方法(在Java中,靜態爲「不可重複」,抽象爲「mustoverride」,因此它們不能共存),所以我不能強制擴展GenericOrderDetailFragment的用戶重寫該方法。
如果我擴展這個泛型類,有一些方法我必須重寫,所以我不能聲明不抽象的父類。
是否可以使用任何解決方法?提前致謝!
哇,這個作品近乎完美,非常感謝!只有一點點注意:我必須_pass_類才能使它工作[OrderDetailNotesFragment.newInstance(_OrderDetailNotesFragment.class_,toSaveOrder); ]。有沒有更緊湊的方式來寫它? newIstance是靜態的,所以我不能簡單地通過自動方式_this_類,因爲沒有任何_this_!無論如何,謝謝! – 2014-10-06 13:43:55
@SimoneChelo不,我不知道在方法調用中省略類。你也必須告訴方法創建哪個類... – 2014-10-06 13:45:57
好吧,它也適用於這種方式!再次感謝! – 2014-10-06 13:46:48