Ich habe gerade ein schnelles Experiment in Eclipse durchgeführt.Sind Stack-Traces weniger navigierbar, wenn Methodenverweise vs Lambdas verwendet werden?
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();
}
}
Wenn das Verfahren Verweis Test fehlschlägt, beginnt die Spur
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)
Es gibt keine Bezugnahme auf die Linie, auf der wieder die Methode Referenz obwohl das Ende der Spur verwendet wird (nicht dargestellt) verbindet sich zurück zur Linie mit findFirst
an.
Während die lamdba stacktrace beginnt
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)
Welche korrekt das Lambda identifiziert auf der Leitung verwendet wurde 26.
Ist dies eine Besonderheit des Eclipse-Compiler oder ist dies ein genereller Nachteil Verfahren Referenzen verwenden, sollte bei der Wahl zwischen ihnen und einem Lambda berücksichtigt werden?
Nein, das kommt von Java. Sie arbeiten an der Verbesserung der Stack-Trace-Erfahrung –
Ich habe nie gehört, dass ein Entwickler für eine längere Stack-Spur fragt, bevor ... – Holger