Eclipseで簡単な実験を行ったばかりです。メソッドリファレンステストが失敗した場合メソッド参照とラムダの使用時に、スタックトレースがナビゲートしにくいですか?
public class StackTractTest {
static class Nasty {
public Integer toInt() {
if (1 == 1) throw new RuntimeException();
return 1;
}
}
@Test
public void methodReference() {
Stream.of(new Nasty())
.map(Nasty::toInt)
.findFirst();
}
@Test
public void lambda() {
Stream.of(new Nasty())
.map(n -> n.toInt())
.findFirst();
}
}
、トレースは
java.lang.RuntimeException
at com.example.StackTractTest$Nasty.toInt(StackTractTest.java:11)
at com.example.StackTractTest$$Lambda$1/1681433494.apply(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
を開始し、バックトレースの端部(図示せず)がメソッド参照が使用されている行への参照はありませんオンラインでfindFirst
とリンクしています。
lamdbaのスタックトレースが正しくラムダを識別
java.lang.RuntimeException
at com.example.StackTractTest$Nasty.toInt(StackTractTest.java:11)
at com.example.StackTractTest.lambda$0(StackTractTest.java:26)
at com.example.StackTractTest$$Lambda$1/1681433494.apply(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
はライン26
で使用されていたから始まりますが、これはEclipseのコンパイラのクセですかこれはメソッドの参照を使用しての一般的な欠点でありますそれらとラムダの間で選択するときに考慮する必要がありますか?
いいえ、これはJavaの仕組みです。彼らはスタックトレースの経験を改善するために働いています –
私は決して前にもっと長いスタックトレースを求める開発者を聞いたことがありません... – Holger