2016-04-24 164 views
1

我正在編寫一個程序,我想知道是否可以將方法作爲另一個方法的參數傳遞。例如,以下內容:有沒有辦法將方法作爲參數傳遞給方法?

public boolean update(Method m){ //input is a method 
    int i = m.execute(); 
    // logic relating to the value of i 
} 

我想知道我是否可以在java中執行此操作。我目前正在閱讀函數式編程和反射。

+1

你能夠使用Java 8嗎?它增加了對lambda表達式的支持,這使得函數式編程更容易。如果沒有,那麼反思就是做你要求的方式。 –

+0

我從你的問題中收集,你還沒有嘗試創建一個簡單的程序來嘗試它?即使它不起作用,當您編寫代碼,測試它,並告訴我們結果時,它會提供更好的問題。請參閱http://stackoverflow.com/help/mcve –

+0

是的。 Lambdas非常有用,並且提供了一些Java中的函數編程功能 – Logan

回答

2

這與反射無關,但如果您使用java 8 +,則可以傳遞「方法引用」。從你的例子假設你打算使用不帶參數,只是返回一個int的方法,你可以這樣做:

public class MyClass { 
    public int getIntMemberFunction(){ ... } 
    public static int getIntStaticFunction(){ ... } 
} 

與修改成這個樣子你的更新功能,

public boolean update(IntSupplier s){ //input is a method reference or lambda 
    int i = s.get(); 
    // logic relating to the value of i 
} 

然後你可以調用update傳遞一個參考任何靜電功能上的任何類,只要它不帶任何參數,並返回一個int,像這樣:

boolean result = update(MyClass::getIntStaticFunction); 

或y歐可致電update傳遞到只要一個特定對象的成員函數的一個參考,因爲它不帶任何參數,並返回一個int,像這樣:

MyClass myClassInstance = ... 
boolean result = update(myClassInstance::getIntMemberFunction); 

如果你想補充一點,取1個或2個參數的方法,您可以創建update版本,其版本號爲ToIntFunctionToIntBiFunction。超過2個參數,你將不得不添加你自己的功能接口。

0

一種方法是使用接口。在Java中,您可以將一個實現特定接口的對象作爲參數傳遞給一個函數,因此您可以在該對象上調用該方法。 更多現代語言,比如Python,Swift,Javascript,對這個習慣用法有更好的支持。

相關問題