Java 来自bukkitrunable的返回值
我使用bukkitrunable向映射异步添加值,然后我想返回映射Java 来自bukkitrunable的返回值,java,minecraft,bukkit,Java,Minecraft,Bukkit,我使用bukkitrunable向映射异步添加值,然后我想返回映射 public Map<String, Object> test() { final Map<String, Object> testMap = new HashMap<>(); new BukkitRunnable() { @Override public void run() { testMap.put("A"
public Map<String, Object> test() {
final Map<String, Object> testMap = new HashMap<>();
new BukkitRunnable() {
@Override
public void run() {
testMap.put("A", 1);
testMap.put("B", 2);
}
}.runTaskAsynchronously(bridge);
return testMap;
}
publicmap测试(){
final-Map testMap=new-HashMap();
新的bukkitrunable(){
@凌驾
公开募捐{
testMap.put(“A”,1);
testMap.put(“B”,2);
}
}.runtask异步运行(桥接);
返回testMap;
}
如果我想使用这张地图,它将永远是空的。它在将值添加到映射之前返回,因为我正在另一个线程中添加它们
我真的想用一个BukkitRunnable,而不是未来。我怎样才能做到这一点?我需要延迟返回映射,或者更好的是,从BukkitRunnable返回映射。问题是
映射将直接返回,但任务将异步运行,因此返回的映射将为空。因此,您应该向该方法添加使用者
,以获得异步结果
试试这个:
公共无效测试(使用者回调){
final Map yourMap=new HashMap();
新的bukkitrunable(){
@凌驾
公开募捐{
你的地图;
你的地图;
callback.accept(yourMap);//消费者在这里获得地图
}
}.runtask异步运行(桥接);
}
用途λ:
。。。
referenceToClass.test(map->{//Lambda
objectsomeobject=map.get(“A”);
});
正常使用:
。。。
referenceToClass.test(new consumery)您可以执行回调。因此,您的方法测试将是test(Function callback)
,并在中运行,在您将信息放入您调用的mapcallback.execute(map)
中之后,您可以使用非空的map执行方法。不确定如何使用此方法。Consumer如何工作?