美好的一天。如何在Java中創建一個類的方法數組
我有一個課,我將用它來爲訓練目的生成數學練習。課程由一系列方法組成,每個方法都會產生一種類型的練習。
我想然後製作一個隨機生成一個隨機練習的方法。要做到這一點,我想將方法名稱存儲在一個數組中,並調用一個隨機條目。
到目前爲止這麼好。
因爲將來我會添加方法來生成新的運動類型,我想知道是否有一種方法來動態生成方法的數組:一旦類加載,構造函數將檢查可用的方法並將它們的名稱存儲在一個數組中。
這可能嗎?如果是這樣,怎麼樣?
美好的一天。如何在Java中創建一個類的方法數組
我有一個課,我將用它來爲訓練目的生成數學練習。課程由一系列方法組成,每個方法都會產生一種類型的練習。
我想然後製作一個隨機生成一個隨機練習的方法。要做到這一點,我想將方法名稱存儲在一個數組中,並調用一個隨機條目。
到目前爲止這麼好。
因爲將來我會添加方法來生成新的運動類型,我想知道是否有一種方法來動態生成方法的數組:一旦類加載,構造函數將檢查可用的方法並將它們的名稱存儲在一個數組中。
這可能嗎?如果是這樣,怎麼樣?
不是存儲的名稱,你可以存儲方法代理
Method[] methods = getClass().getDeclaredMethods();
你需要經歷這些都是不理你加不屬於任何測試方法。
偉大..!它真的有效... – Hassan
您可以使用Reflection API
使用
Method[] methods= Class.forName("ClassTo test").getDeclaredMethods();
檢查可用的方法說了有這麼多的事情都可能出錯,而調用的方法。
你可以只是有
interface IExercise
{
void createExercise();
}
class Exercise1 implements IExercise
{
@Override
public void createExercise()
{
}
}
避免它,然後你可以使用IExercise[]
產生Exercise
隨機。
羽絨投票請解釋? –
可能是因爲'在Java中,你不能在運行時生成方法'是誤導性的,可能是因爲'ClassName.class.getDeclaredMethods()'更短,更不容易出錯。 (聲明:不是我) –
@JacobRaihle我想是的。編輯答案。不管怎樣,謝謝 :) –
創建類似的對象:
MathExample math = new MathExample();
並將它們添加到ArrayList<Objects>
您可以使用反射來發現類的方法。
但在我看來,這是一個糟糕的建築。更好的方式來處理不同的練習是創建一個接口IExercise
,將由*Exercise
類實現。然後創建這些對象,將它們放入一個數組並隨機選取一個。然後調用從接口什麼的指定方法...
我highy建議更換找了一個策略模式:
http://en.wikipedia.org/wiki/Strategy_pattern
你會如何將其應用到你的問題?只需創建一個對象來實現公共接口(爲您提供創建練習的方法)並使用此對象的List。
你也會練習一個非常有用的模式!
我認爲使用命令模式並將每個練習存儲爲實現標記接口(ICommand)的命令類會更安全。之後,您可以使用反射來在運行時檢測在類路徑上實現ICommand的所有類,以獲得可以運行的練習列表。這也可以讓你不必在隨機選擇代碼中添加你設計的每一種新型練習。
http://en.wikipedia.org/wiki/Command_pattern
這有點類似於策略模式以下建議。
我想,最好在數組中創建chain of responsibility和stroe命令。隨機選擇命令並放入鏈中。
瞭解[反射API](http://docs.oracle.com/javase/tutorial/reflect/index.html)。 – Jesper
謝謝大家,特別感謝那些建議替代架構的人。我會盡快檢查出來。我選擇了接受的最直接的答案。親切的問候 – DavidTonarini