我正在編寫一個程序,我想知道是否可以將方法作爲另一個方法的參數傳遞。例如,以下內容:有沒有辦法將方法作爲參數傳遞給方法?
public boolean update(Method m){ //input is a method
int i = m.execute();
// logic relating to the value of i
}
我想知道我是否可以在java中執行此操作。我目前正在閱讀函數式編程和反射。
我正在編寫一個程序,我想知道是否可以將方法作爲另一個方法的參數傳遞。例如,以下內容:有沒有辦法將方法作爲參數傳遞給方法?
public boolean update(Method m){ //input is a method
int i = m.execute();
// logic relating to the value of i
}
我想知道我是否可以在java中執行此操作。我目前正在閱讀函數式編程和反射。
這與反射無關,但如果您使用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
版本,其版本號爲ToIntFunction
或ToIntBiFunction
。超過2個參數,你將不得不添加你自己的功能接口。
一種方法是使用接口。在Java中,您可以將一個實現特定接口的對象作爲參數傳遞給一個函數,因此您可以在該對象上調用該方法。 更多現代語言,比如Python,Swift,Javascript,對這個習慣用法有更好的支持。
你能夠使用Java 8嗎?它增加了對lambda表達式的支持,這使得函數式編程更容易。如果沒有,那麼反思就是做你要求的方式。 –
我從你的問題中收集,你還沒有嘗試創建一個簡單的程序來嘗試它?即使它不起作用,當您編寫代碼,測試它,並告訴我們結果時,它會提供更好的問題。請參閱http://stackoverflow.com/help/mcve –
是的。 Lambdas非常有用,並且提供了一些Java中的函數編程功能 – Logan