ข้อดีของรูปแบบไม่คงที่คือคุณสามารถประกาศในคลาสพื้นฐาน (นามธรรม) ดังต่อไปนี้โดยไม่ต้องกังวลว่าจะใช้ชื่อคลาสที่ถูกต้อง:
protected Log log = new Log4JLogger(getClass());
อย่างไรก็ตามข้อเสียคือเห็นได้ชัดว่าอินสแตนซ์คนตัดไม้ใหม่ทั้งหมดจะถูกสร้างขึ้นสำหรับทุกอินสแตนซ์ของคลาส สิ่งนี้อาจไม่แพง แต่จะเพิ่มค่าใช้จ่ายที่สำคัญ หากคุณต้องการหลีกเลี่ยงสิ่งนี้คุณต้องการใช้static
แบบฟอร์มแทน แต่ข้อเสียคือคุณต้องประกาศในแต่ละคลาสและดูแลในทุกคลาสว่ามีการใช้ชื่อคลาสที่ถูกต้องระหว่างการสร้างคนตัดไม้เนื่องจากgetClass()
ไม่สามารถใช้ในบริบทคงที่ อย่างไรก็ตามใน IDE โดยเฉลี่ยคุณสามารถสร้างเทมเพลตการเติมข้อความอัตโนมัติสำหรับสิ่งนี้ได้ เช่นlogger
+ ctrl+space
.
ในทางกลับกันหากคุณได้รับเครื่องตัดไม้จากโรงงานซึ่งอาจแคชผู้บันทึกที่สร้างอินสแตนซ์แล้วการใช้รูปแบบไม่คงที่จะไม่เพิ่มค่าใช้จ่ายมากขนาดนั้น ตัวอย่างเช่น Log4j มีLogManager
สำหรับวัตถุประสงค์นี้
protected Log log = LogManager.getLogger(getClass());