Apa itu [Ljava.lang.Object ;?

1. Ikhtisar

Dalam tutorial ini, kita akan mempelajari apa arti [Ljava.lang.Object dan cara mengakses nilai objek yang tepat.

2. Kelas Objek Java

Di Java, jika kita ingin mencetak nilai langsung dari suatu objek, hal pertama yang bisa kita coba adalah memanggil metode toStringnya :

Object[] arrayOfObjects = { "John", 2, true }; assertTrue(arrayOfObjects.toString().startsWith("[Ljava.lang.Object;"));

Jika kami menjalankan pengujian, itu akan berhasil, tetapi biasanya, itu bukan hasil yang sangat berguna.

Yang ingin kami lakukan adalah mencetak nilai di dalam array. Sebagai gantinya, kami memiliki [Ljava.lang.Object. Nama kelas, seperti yang diterapkan di Object.class :

getClass().getName() + '@' + Integer.toHexString(hashCode())

Ketika kita mendapatkan nama kelas langsung dari objek, kita mendapatkan nama internal dari JVM dengan tipenya, itulah mengapa kita memiliki karakter tambahan seperti [ dan L , mereka masing-masing mewakili tipe Array dan ClassName.

3. Mencetak Nilai Berarti

Untuk bisa mencetak hasilnya dengan benar, kita bisa menggunakan beberapa kelas dari paket java.util .

3.1. Array

Misalnya, kita dapat menggunakan dua metode di kelas Array untuk menangani konversi.

Dengan array satu dimensi, kita dapat menggunakan metode toString :

Object[] arrayOfObjects = { "John", 2, true }; assertEquals(Arrays.toString(arrayOfObjects), "[John, 2, true]");

Untuk array yang lebih dalam, kami memiliki metode deepToString :

Object[] innerArray = { "We", "Are", "Inside" }; Object[] arrayOfObjects = { "John", 2, innerArray }; assertEquals(Arrays.deepToString(arrayOfObjects), "[John, 2, [We, Are, Inside]]");

3.2. Streaming

Salah satu fitur baru yang signifikan di JDK 8 adalah pengenalan aliran Java , yang berisi kelas untuk memproses urutan elemen:

Object[] arrayOfObjects = { "John", 2, true }; List listOfString = Stream.of(arrayOfObjects) .map(Object::toString) .collect(Collectors.toList()); assertEquals(listOfString.toString(), "[John, 2, true]");

Pertama, kami telah membuat aliran menggunakan metode helper . Kami telah mengubah semua objek di dalam array menjadi string menggunakan peta, lalu kami telah memasukkannya ke daftar menggunakan kumpulkan untuk mencetak nilai.

4. Kesimpulan

Dalam tutorial ini, kita telah melihat bagaimana kita dapat mencetak informasi yang berarti dari sebuah array dan menghindari default [Ljava.lang.Object ;.

Kami selalu dapat menemukan kode sumber untuk artikel ini di GitHub.