ฉันเจอNoStackTrace
มิกซ์อินสำหรับข้อยกเว้นในงานกาลา
มันเป็นการปฏิบัติที่ดีที่จะใช้หรือควรพิจารณาว่า "ภายใน" เพื่อสกาล่าและทิ้งไว้ตามลำพัง?
ฉันเจอNoStackTrace
มิกซ์อินสำหรับข้อยกเว้นในงานกาลา
มันเป็นการปฏิบัติที่ดีที่จะใช้หรือควรพิจารณาว่า "ภายใน" เพื่อสกาล่าและทิ้งไว้ตามลำพัง?
คำตอบ:
รอสักครู่ให้ตรงไปที่ Stack Overflow - ข้อยกเว้น Java ช้าแค่ไหน
ปรากฎว่าส่วนที่มีราคาแพงของการโยนข้อยกเว้นคือประชากรของการติดตามสแต็กที่ไปพร้อมกับข้อยกเว้น
การติดตามสแต็กนี้มีประโยชน์มากเมื่อทำการดีบักปัญหาเพื่อลองคิดดูว่าจะเรียกสิ่งใดจาก หนึ่งในคำถามมาตรฐานที่ถามถึงปัญหาคือ "โค้ดคืออะไร" และ "การติดตามสแต็กคืออะไร" หากไม่มีสองสิ่งนี้การวินิจฉัยปัญหาจะเป็นไปไม่ได้
แต่ไม่ทั้งหมดยกเว้นจะถูกสร้างโดยปัญหาที่เกิดขึ้น บางคนก็เกือบจะคาดหวัง
พิจารณาสถานการณ์ที่คุณได้มี String จากแหล่งบางและคุณต้องการที่จะได้รับมันกลับเข้ามาในรูปแบบจำนวนเต็มกับInteger.decode
Integer foo = Integer.decode(str);
แต่ที่พ่นตรวจสอบdecode
NumberFormatException
ตกลง...
Integer foo;
try {
foo = Integer.decode(str);
} catch (NumberFromatException e) {
// raise an error back to the input form
}
แต่คุณไม่สนใจเกี่ยวกับการติดตามสแต็กที่นั่น ... แต่มันอยู่ที่นั่น และช้าลงเล็กน้อยเพราะมันเติมสแต็กการติดตาม
ดังนั้นในสกาล่าคุณมีNoStackTrace
:
คุณลักษณะสำหรับข้อยกเว้นซึ่งสำหรับเหตุผลด้านประสิทธิภาพอย่ากรอกข้อมูลในการติดตามสแต็ก การยับยั้งการติดตามสแต็กสามารถปิดใช้งานได้ทั่วโลกผ่านทางตัวห่อคุณสมบัติระบบใน scala.sys.SystemProperties
อย่าเติมสิ่งที่คุณไม่ต้องการ คุณไม่สนใจเกี่ยวกับการติดตามสแต็กเพราะคุณจัดการที่นั่นแล้ว นี่ไม่ใช่สิ่งที่กำลังผ่านพ้นไปและไม่ใช่ทั้งหมดที่พิเศษเช่นกัน
มันไม่ใช่วิธีปฏิบัติที่ไม่ดีที่จะใช้เมื่อคุณรู้ว่าคุณกำลังจัดการอะไร แต่ถ้าคุณทำสิ่งนี้ผ่านโซ่ - อย่าใช้มัน - คุณอาจต้องบันทึกว่ามีข้อยกเว้นมาจากไหน