मैंने अभी ग्रहण में एक त्वरित प्रयोग किया है।विधि संदर्भ बनाम lambdas का उपयोग करते समय स्टैक निशान कम navigable हैं?
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.
पर इस्तेमाल किया गया था इस ग्रहण संकलक की एक विशेष लक्षण है या इस विधि संदर्भों का उपयोग की एक सामान्य नुकसान है कि उन्हें और एक भेड़ का बच्चा चुनने पर विचार किया जाना चाहिए?
नहीं, यह जावा से कैसे आता है। वे स्टैक-ट्रेस अनुभव –
में सुधार करने पर काम कर रहे हैं मैंने कभी डेवलपर को लंबे समय तक स्टैक ट्रेस मांगने के लिए नहीं सुना है ... – Holger