Java中的函数指针/委托?

2022-09-02 09:25:19

对于我的Java游戏服务器,我发送数据包的操作ID,它基本上告诉服务器数据包的用途。我想将每个操作 ID(一个整数)映射到一个函数。有没有办法在不使用开关的情况下做到这一点?


答案 1

这个呢?

HashMap<Integer, Runnable> map = new HashMap<Integer, Runnable>();
map.put(Register.ID, new Runnable() { 
    public void run() { functionA(); }
});
map.put(NotifyMessage.ID, new Runnable() { 
    public void run() { functionB(); }
});
// ...
map.get(id).run();

(如果需要传递一些参数,请使用具有合适参数的函数定义自己的接口,并使用它而不是 Runnable)。


答案 2

另一种类似的方法可能是使用Java 8的供应商:

Map<Integer, Supplier<T>> suppliers = new HashMap();

suppliers.put(1, () -> methodOne());
suppliers.put(2, () -> methodTwo());

// ...

public T methodOne() { ... }
public T methodTwo() { ... }

// ...

T obj = suppliers.get(id).run();

推荐