我有一個抽象類MyClass
用靜態方法來填充給出收集了一些MyClassDescendant
對象。此方法應調用MyClassDescendant
的靜態getRandom()
方法來獲取對象實例。如何獲得類對象沒有實例或類名稱
我當前的代碼如下所示:
public static void populate(Collection<MyClass> coll, Class<? extends MyClass> cl, int num) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
for (int i = 0; i < num; i++) {
Method m;
m = cl.getMethod("getRandom");
coll.add((MyClass)(m.invoke(null)));
}
}
然後我把它叫做這樣的:
MyClass.populate((Collection<MyClass>)(Collection<?>)collection, MyClassDescendant.class, 3);
此代碼的工作,但它的醜陋。我其實是想實現應該是這樣的:
MyClassDescendant.populate(collection, 3);
如果它不是一個靜態方法,我只用this.getClass()
。我知道MyClass.class
將靜態方法的工作,但我不想class
爲MyClass
,但對於具體的MyClassDescendant
(很少有傳人類型)。
有沒有什麼辦法讓類對象,而無需其實例或類的名字嗎?
由於該方法'填充()'在基類是靜態的,它不能在派生類中重寫。相反,您可以在每個派生類中實現它以使用該類的實例填充集合。 – niculare 2013-03-27 18:26:31
是的,這是行得通的,但我想避免在多個類中複製粘貼幾乎相同的代碼。 – gronostaj 2013-03-27 18:32:15
你是否總是在靜態環境中調用它? – 2013-03-27 18:43:48