2012-08-29 75 views
3

美好的一天。如何在Java中創建一個類的方法數組

我有一個課,我將用它來爲訓練目的生成數學練習。課程由一系列方法組成,每個方法都會產生一種類型的練習。

我想然後製作一個隨機生成一個隨機練習的方法。要做到這一點,我想將方法​​名稱存儲在一個數組中,並調用一個隨機條目。

到目前爲止這麼好。

因爲將來我會添加方法來生成新的運動類型,我想知道是否有一種方法來動態生成方法的數組:一旦類加載,構造函數將檢查可用的方法並將它們的名稱存儲在一個數組中。

這可能嗎?如果是這樣,怎麼樣?

+0

瞭解[反射API](http://docs.oracle.com/javase/tutorial/reflect/index.html)。 – Jesper

+0

謝謝大家,特別感謝那些建議替代架構的人。我會盡快檢查出來。我選擇了接受的最直接的答案。親切的問候 – DavidTonarini

回答

3

不是存儲的名稱,你可以存儲方法代理

Method[] methods = getClass().getDeclaredMethods(); 

你需要經歷這些都是不理你加不屬於任何測試方法。

+1

偉大..!它真的有效... – Hassan

2

您可以使用Reflection API使用

Method[] methods= Class.forName("ClassTo test").getDeclaredMethods(); 

檢查可用的方法說了有這麼多的事情都可能出錯,而調用的方法。

你可以只是有

interface IExercise 
{ 
    void createExercise(); 
} 
class Exercise1 implements IExercise 
{ 
    @Override 
    public void createExercise() 
    { 
    } 
} 

避免它,然後你可以使用IExercise[]產生Exercise隨機。

+1

羽絨投票請解釋? –

+0

可能是因爲'在Java中,你不能在運行時生成方法'是誤導性的,可能是因爲'ClassName.class.getDeclaredMethods()'更短,更不容易出錯。 (聲明:不是我) –

+0

@JacobRaihle我想是的。編輯答案。不管怎樣,謝謝 :) –

0

創建類似的對象:

MathExample math = new MathExample(); 

並將它們添加到ArrayList<Objects>

6

您可以使用反射來發現類的方法。

但在我看來,這是一個糟糕的建築。更好的方式來處理不同的練習是創建一個接口IExercise,將由*Exercise類實現。然後創建這些對象,將它們放入一個數組並隨機選取一個。然後調用從接口什麼的指定方法...

3

我highy建議更換找了一個策略模式:

http://en.wikipedia.org/wiki/Strategy_pattern

你會如何將其應用到你的問題?只需創建一個對象來實現公共接口(爲您提供創建練習的方法)並使用此對象的List。

你也會練習一個非常有用的模式!

1

我認爲使用命令模式並將每個練習存儲爲實現標記接口(ICommand)的命令類會更安全。之後,您可以使用反射來在運行時檢測在類路徑上實現ICommand的所有類,以獲得可以運行的練習列表。這也可以讓你不必在隨機選擇代碼中添加你設計的每一種新型練習。

http://en.wikipedia.org/wiki/Command_pattern

這有點類似於策略模式以下建議。

相關問題