我正在寻找一种通过引用传递方法的方法.我知道Java不会将方法作为参数传递,但是,我想获得一个替代方案.
我被告知接口是将方法作为参数传递的替代方法,但我不明白接口如何通过引用充当方法.如果我理解正确,接口只是一组未定义的抽象方法.我不希望每次都发送需要定义的接口,因为几种不同的方法可以使用相同的参数调用相同的方法.
我想要完成的是类似的事情:
public void setAllComponents(Component[] myComponentArray, Method myMethod) {
for (Component leaf : myComponentArray) {
if (leaf instanceof Container) { //recursive call if Container
Container node = (Container) leaf;
setAllComponents(node.getComponents(), myMethod);
} //end if node
myMethod(leaf);
} //end looping through components
}
Run Code Online (Sandbox Code Playgroud)
调用如:
setAllComponents(this.getComponents(), changeColor());
setAllComponents(this.getComponents(), changeSize());
Run Code Online (Sandbox Code Playgroud) 在C#中,您可以匿名定义委托(即使它们只不过是语法糖).例如,我可以这样做:
public string DoSomething(Func<string, string> someDelegate)
{
// Do something involving someDelegate(string s)
}
DoSomething(delegate(string s){ return s += "asd"; });
DoSomething(delegate(string s){ return s.Reverse(); });
Run Code Online (Sandbox Code Playgroud)
是否可以在Java中传递这样的代码?我正在使用处理框架,它有一个相当旧版本的Java(它没有泛型).
TLDR:
是否有一个Java等价的C#委托,它允许我排队各种类的方法并动态地将它们添加到队列中?语言构造而不是代码.
语境:
我以前使用过Unity 3D,我喜欢Update脚本方法之类的东西.只是声明该方法将其添加到每帧执行的方法列表中.我想在我的LWJGL游戏中创建类似的东西.为此,我想使用委托(或类似的东西).是否有任何Java语言结构允许我这样做?我更喜欢包含两个或更多的答案(以便我可以选择哪个是我的代码最优化的)构造和使用它们的方法.我不想要代码,我只想知道从哪里开始.编程中最有趣的部分是解决问题,我不想被剥夺.此外,我不想被告知如何做到这一点.我希望被引导朝着正确的方向,而不是朝着那个方向被抛到那个目的地.我该怎么学?:-)
我最近在一次采访中被问到,如果我们没有事件和代表,我们如何在没有代表和事件的情况下实现Publisher和Subsriber模型的相同功能.
你能用一个例子向我解释一下它会非常有用并且也能帮助别人吗?
我可以使用接口方法而不是委托吗?怎么样?我发现搜索接口方法比使用委托更快.我将很感激一个简单的代码片段.