Java logger: inisialisasi blok statis atau inisialisasi dalam deklarasi variabel


15

Saat ini saya menggunakan logger di proyek saya dengan cara berikut:

private static final Logger LOGGER;

static{
  LOGGER = logger.getLogger();
}

Saya mendapat review kode untuk menggunakan blok statis untuk menginisialisasi variabel logger. Saya diberitahu untuk menginternalisasi variabel logger dalam pernyataan deklarasi itu sendiri.

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

Saya mencoba mencari tahu apa bedanya jika saya tidak menginisialisasi di blok statis. Saya ingin tahu apakah ini sebuah praktik.


8
Tidak ada bedanya, tetapi salah satunya melibatkan lebih banyak mengetik dan lebih banyak baris kode.
user253751

Keduanya akan menghasilkan bytecode yang persis sama. Yang mana yang Anda sukai sepenuhnya adalah masalah selera,
user207421

Kenapa kamu tidak menggunakan Lombok?
Pasang kembali Monica - M. Schröder

Jawaban:


48

Kecuali untuk beberapa kasus sudut yang benar-benar aneh yang melibatkan urutan inisialisasi, dua alternatif akan bekerja sama persis.

Namun, menginisialisasi instance tepat dalam deklarasi lebih pendek dan lebih akrab, dan harus lebih disukai karena alasan itu saja.

Blok inisialisasi statis adalah konstruk yang agak eksotis dan hanya boleh digunakan ketika mereka benar-benar memberikan nilai tambah, seperti ketika Anda perlu menangani pengecualian.


7
Poin bagus menyebutkan Pengecualian sebagai kasus langka untuk menggunakan blok statis.
user949300

4
Menginternalisasi HashMap adalah usecase lain yang bagus.
RubberDuck

3
@RubberDuck Meskipun Map.ofmetode Java 9 seharusnya membantu.
cbojar

1
@cbojar Map.ofmengembalikan peta yang tidak dapat diubah, jadi jika Anda benar-benar membutuhkannya, HashMapAnda masih perlu melakukannya dengan cara lama. Atau sesuatu sepertinew HashMap(Map.of(...))
kapex

1
@ Kapap Ya, menggunakannya untuk meneruskan ke konstruktor adalah bagaimana saya akan melakukannya jika saya membutuhkan peta yang bisa diubah-ubah alih-alih blok penginisialisasi.
cbojar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.