Java中的函数指针/委托?
2022-09-02 09:25:19
对于我的Java游戏服务器,我发送数据包的操作ID,它基本上告诉服务器数据包的用途。我想将每个操作 ID(一个整数)映射到一个函数。有没有办法在不使用开关的情况下做到这一点?
对于我的Java游戏服务器,我发送数据包的操作ID,它基本上告诉服务器数据包的用途。我想将每个操作 ID(一个整数)映射到一个函数。有没有办法在不使用开关的情况下做到这一点?
这个呢?
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)。
另一种类似的方法可能是使用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();