所以...不完全确定以前是否已经回答过这个问题,虽然我怀疑它已经解决了,而我根本不理解我目前对该语言的了解。因此,稍微进一步的解释可能是好的,我相信这可能是重复的线程是
我想做的基本想法是这样的:
public void doStuff(String parameter, int parameter, Action/Method/Scope/thing action){
for(parameters){
action();
}
}
会像这样调用:
String parameter1;
int parameter2;
doStuff(parameter1, parameter2){
action
}
这是非常通用的。很抱歉没有具体的内容。我想到的主要是我一直试图制作一个类似于奥术师(目标)的“炮兵游戏”,或者也许是重力战争(作为一个更近期/更受欢迎的例子)令人讨厌的一点是我经常工作在像素级别编辑图像,因为通用bufferedImage / graphic /无论正常的& GreenfootImage(greenfoot是我正在使用的环境)缺乏我想要的东西。
现在真的很累,请耐心等待我。如果其中一些看起来奇怪的语无伦随意请求澄清,当我打字疲惫时,我并不总是最容易理解。
答案 0 :(得分:1)
要在Java 8中“传递方法”,您需要匹配的functional interface,即只有一个方法的接口,其参数和返回类型与您要传递的方法相匹配。
您可以使用java.util.function
包中的一种标准方法,也可以自己编写。例如。标准接口有各种方法,包括0,1或2个参数。
由于您的参数类型不同,您可以使用BiFunction
,或者您可以像这样创建自己的参数:
public interface StringIntConsumer {
void accept(String s, int i);
}
您现在可以编写代码来接受这样的方法:
public void doStuff(String text, int count, StringIntConsumer action) {
for (int i = 0; i < count; i++) {
action.accept(text, i);
}
}
然后使用Lambda Expression:
进行调用doStuff("Foo", 10, (name, idx) -> {
// use name and idx here
// will be called 10 times with idx value 0-9
});
如您所见,参数名称不需要匹配。
答案 1 :(得分:0)
您已经描述了BiFunction<T, U, R>
,
static <T, U, R> R doStuff(T t, U u, BiFunction<T, U, R> func) {
return func.apply(t, u);
}
你可以称之为
public static void main(String[] args) {
System.out.println(doStuff("Hello", 1, (x, y) -> x + " " + y));
}
只打印&#34; Hello 1&#34; - 但不清楚你想做什么动作。