Intellij idea 为什么调试断点不影响我的lamda函数(java8使用idea)?
版本:IDEA 2019.3 JDK8 尝试过的方法:Intellij idea 为什么调试断点不影响我的lamda函数(java8使用idea)?,intellij-idea,lambda,java-8,Intellij Idea,Lambda,Java 8,版本:IDEA 2019.3 JDK8 尝试过的方法: 我想用大括号把它包起来 在全球范围内,只有一个断点被命中,没有一个断点生效 程序直接进入保存方法 public <V0 extends Rmap> Output<V0> prior(Trans<V0, Rmap> conv) { return saving(ds0 -> { enqueue((DSdream) ds0.map((Function<
public <V0 extends Rmap> Output<V0> prior(Trans<V0, Rmap> conv) {
return saving(ds0 -> {
enqueue((DSdream) ds0.map((Function<Rmap, Rmap>) row -> {
Rmap r = conv.apply((V0) row);
return Rec.of(r, tds.get(r.table().toString()));
}, f));
});
}
公共输出优先(Trans-conv){
返回保存(ds0->{
排队((DSdream)ds0.map((函数)行->{
Rmap r=conv.apply((V0)行);
返回Rec.of(r,tds.get(r.table().toString());
},f));
});
}
如何在lambda断点处停车
谢谢我尝试使用一个匿名的内部类,它通常会在断点处停止
@Override
public <V0 extends Rmap> Output<V0> prior(Trans<V0, Rmap> conv) {
Output<Rmap> saving = saving(new Consumer<DSdream>() {
@Override
public void accept(DSdream dSdream) {
enqueue((DSdream)
dSdream.map((Function<Rmap, Rmap>) row -> {
Rmap r = conv.apply((V0) row);
return Rec.of(r, tds.get(r.table().toString()));
}, f));
}
});
return (Output<V0>) saving;
}
@覆盖
公共输出优先(Trans-conv){
输出保存=保存(新消费者(){
@凌驾
公共无效接受(DSdream DSdream){
排队((DSdream)
dSdream.map((函数)行->{
Rmap r=conv.apply((V0)行);
返回Rec.of(r,tds.get(r.table().toString());
},f));
}
});
返回(输出)保存;
}
据推测,反编译后,lambda被编译到内部类中,
因此无法定位断点。
这应该是lambda的缺点请内联发布代码,不要发布IDE的屏幕截图。您是否确保断点行上的代码已实际执行?启动调试会话时-检查断点是否有状态。在启动调试之前,请尝试build | Rebuild操作。检查断点设置-已启用挂起。未发生反编译。此外,lambda表达式被编译为其包含类的方法。lambda表达式中的断点没有问题。你的问题是合乎逻辑的;由于
accept
方法在调用saving
方法之前未被调用,因此accept
方法中的断点也不能在调用之前命中。匿名内部类不会改变这一点。我有点困惑,lambda不是顺序执行吗?因为我不知道你的保存方法是做什么的,所以我不能说它是否会顺序执行使用者的代码。甚至可能该方法根本不调用它。可以肯定的是,您的previor
没有调用accept
方法(或者您是否在代码中看到accept
调用?)。您正在创建对象并将其传递给saving
方法,并且saving
方法可能会调用对象上的方法。因此,当然,在进入保存方法之前不会碰到断点。我明白你的意思。代码太大,无法复制,我应该将问题抽象到小演示中。