gpt4 book ai didi

Java 等效于 C# Delegates(将要执行的各种类的方法排队)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:00:19 24 4
gpt4 key购买 nike

简单描述:

是否有与 C# 的 delegates 等效的 Java这将允许我将各种类的方法排队并动态地将它们添加到队列中?语言构造而不是代码。

上下文:

我以前使用过 Unity 3D,我喜欢脚本的 Update 方法。只需声明该方法即可将其添加到每帧执行的方法列表中。我想在我的 LWJGL 游戏中创建类似的东西。为此,我想使用委托(delegate)(或类似的东西)。是否有任何 Java 语言结构可以让我这样做?我更喜欢包含两个或更多(这样我就可以挑选最适合我的代码的)构造和使用它们的方法的答案。我不想要代码,我只想知道从哪里开始。编程中最有趣的部分是解决问题,我不想被剥夺这一点。另外,我不想被确切地告知如何去做。我想被引导到正确的方向,而不是被朝那个方向扔到那个目的地。我将如何学习? :-)

最佳答案

实际上,在 Java 中没有完全对应的委托(delegate)。但是有些结构可以模仿它们的行为。

Java 8

函数式接口(interface)

Java 8 中接近委托(delegate)的概念是函数式接口(interface)

例如,如果您有一个 C# 委托(delegate):

delegate void Runnable();

在 Java 中,您将创建一个函数式接口(interface),例如:

@FunctionalInterface
public interface Runnable {
void run();
}

函数式接口(interface)的好处在于它们可以在 lambda expressions 中轻松使用.

例子

那么,假设您有以下类(class):

public class SomeClass {
public static void someStaticMethod() {
}

public void someMethod() {
}
}

Lambda 表达式和方法引用

在 Java 8 中,您可以获得 lambda 表达式。

List<Runnable> queue = new ArrayList<>();
queue.add(() -> someMethod());
queue.add(() -> someStaticMethod());

如果您实际上只是简单地调用一个方法,则有一个名为方法引用 的简写形式:

List<Runnable> queue = new ArrayList<>();
queue.add(this::someMethod);
queue.add(SomeClass::someStaticMethod);

Java 7

对于 Java 7,您唯一可以使用的是 anonymous classes :

List<Runnable> queue = new ArrayList<>();
queue.add(new Runnable() {
public void run() {
someMethod();
}
});
queue.add(new Runnable() {
public void run() {
someStaticMethod();
}
});

我希望这不是太多信息,这样您仍然可以学习。 ;-)但是,我希望我的回答对其他查找此问题的人也有用。

关于Java 等效于 C# Delegates(将要执行的各种类的方法排队),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39346343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com