Java logger: การเริ่มต้นบล็อกแบบคงที่หรือเริ่มต้นในการประกาศตัวแปร


15

ขณะนี้ฉันกำลังใช้ตัวบันทึกในโครงการของฉันด้วยวิธีต่อไปนี้:

private static final Logger LOGGER;

static{
  LOGGER = logger.getLogger();
}

ฉันได้รับรหัสตรวจสอบสำหรับการใช้บล็อกแบบคงที่เพื่อเริ่มต้นตัวแปรตัวบันทึก ฉันบอกให้ intialize ตัวแปร logger ในงบการประกาศตัวเอง

private static final Logger LOGGER = Logger.getLogger();

ฉันพยายามคิดว่ามันจะสร้างความแตกต่างอะไรถ้าฉันไม่เริ่มต้นมันในบล็อกแบบคงที่ ฉันต้องการที่จะรู้ว่านี่คือการปฏิบัติ


8
มันไม่ได้สร้างความแตกต่าง แต่อย่างใดอย่างหนึ่งเกี่ยวข้องกับการพิมพ์เพิ่มเติมและบรรทัดของรหัสเพิ่มเติม
user253751

พวกเขาทั้งสองจะสร้างรหัสเดียวกัน อันไหนที่คุณชอบเป็นเรื่องของรสนิยมอย่าง
แท้จริง

ทำไมคุณไม่ใช้ลอมบอก?
Reinstate Monica - M. Schröder

คำตอบ:


48

ยกเว้นบางกรณีมุมที่แปลกประหลาดจริงๆที่เกี่ยวข้องกับลำดับของ initializers ทางเลือกทั้งสองจะทำงานเหมือนกันทุกประการ

อย่างไรก็ตามการเริ่มต้นอินสแตนซ์ที่ถูกต้องในการประกาศนั้นสั้นกว่าและคุ้นเคยมากกว่าและควรเป็นเหตุผลที่ดีกว่า

บล็อกการกำหนดค่าเริ่มต้นแบบสแตติกเป็นโครงสร้างที่ค่อนข้างแปลกใหม่และควรใช้เฉพาะเมื่อมีการเพิ่มมูลค่าเช่นเมื่อคุณจำเป็นต้องจัดการกับข้อยกเว้น


7
จุดดีที่กล่าวถึงข้อยกเว้นเป็นกรณีที่หายากสำหรับการใช้บล็อกแบบคงที่
user949300

4
การทำให้ HashMap เป็นอีกหนึ่งการใช้งานที่ดี
RubberDuck

3
@RubberDuck แม้ว่าMap.ofวิธีการของ Java 9 น่าจะช่วยได้
cbojar

1
@cbojar Map.ofส่งคืนแผนที่ที่ไม่เปลี่ยนรูปแบบดังนั้นหากคุณต้องการใช้งานจริงHashMapคุณยังต้องทำตามวิธีเดิม หรืออะไรทำนองนั้นnew HashMap(Map.of(...))
kapex

1
@Kapep ใช่การใช้มันเพื่อส่งผ่านไปยัง Constructor คือวิธีที่ฉันจะทำถ้าฉันต้องการแผนที่ที่ไม่แน่นอนแทนที่จะเป็น initializer block
cbojar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.