มันดูเหมือนว่ามีกลิ่นเหม็นและถ้าไม่ได้เห็นบริบทมากขึ้น อาจมีสองเหตุผลในการทำเช่นนี้แม้ว่าจะมีทางเลือกสำหรับทั้งสอง
ขั้นแรกเป็นวิธีรัดกุมในการใช้การแปลงบางส่วนหรือปล่อยให้ผลลัพธ์มีค่าเริ่มต้นหากการแปลงล้มเหลว นั่นคือคุณอาจมีสิ่งนี้:
public void ConvertFoo(Foo from, Foo to) {
if (can't convert) {
return;
}
...
}
Foo a;
Foo b = DefaultFoo();
ConvertFoo(a, b);
// If conversion fails, b is unchanged
แน่นอนว่าโดยปกติจะได้รับการจัดการโดยใช้ข้อยกเว้น อย่างไรก็ตามแม้ว่าจะต้องหลีกเลี่ยงข้อยกเว้นไม่ว่าด้วยเหตุผลใดก็ตามมีวิธีที่ดีกว่าในการทำเช่นนี้ - รูปแบบ TryParseเป็นตัวเลือกหนึ่ง
อีกเหตุผลหนึ่งก็คือมันอาจเป็นเพราะเหตุผลที่สอดคล้องกันหมดจดตัวอย่างเช่นเป็นส่วนหนึ่งของ API สาธารณะที่ใช้วิธีนี้สำหรับฟังก์ชั่นการแปลงทั้งหมดไม่ว่าจะด้วยเหตุผลใด (เช่นฟังก์ชั่นการแปลงอื่น ๆ
Java ไม่ค่อยดีในการจัดการกับเอาต์พุตจำนวนมาก - มันไม่สามารถมีพารามิเตอร์เอาต์พุตอย่างเดียวเช่นบางภาษาหรือมีค่าส่งคืนหลายค่าเช่นอื่น ๆ - แต่ถึงกระนั้นคุณยังสามารถใช้วัตถุส่งคืนได้
เหตุผลความมั่นคงค่อนข้างง่อย แต่น่าเศร้าที่มันเป็นเรื่องธรรมดาที่สุด
- บางทีสไตล์ตำรวจในที่ทำงานของคุณ (หรือโค้ดเบส) มาจากพื้นหลังที่ไม่ใช่จาวาและลังเลที่จะเปลี่ยนแปลง
- รหัสของคุณอาจเป็นพอร์ตจากภาษาที่สไตล์นี้มีความหมายมากกว่า
- องค์กรของคุณอาจต้องรักษาความสอดคล้องของ API ในภาษาต่าง ๆ และนี่เป็นรูปแบบที่ใช้กันน้อยที่สุด (มันเป็นเรื่องที่แย่มาก แต่มันเกิดขึ้นได้แม้กับ Google )
- หรืออาจมีสไตล์ที่เหมาะสมกว่าในอดีตอันไกลโพ้นและปรับเปลี่ยนให้อยู่ในรูปแบบปัจจุบัน (ตัวอย่างเช่นมันอาจเป็นรูปแบบ TryParse แต่ผู้บุกเบิกบางคนตั้งใจเอาค่าส่งคืนออกหลังจากค้นพบว่าไม่มีใครตรวจสอบเลย)