0Pricing
Java Academy · Pelajaran

Inspeksi Class dengan Reflection

Ambil objek Class dan periksa field, metode, konstruktor, serta anotasi saat runtime.

Inspeksi Class dengan Reflection adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Apa Itu Refleksi?

Refleksi memungkinkan program Java memeriksa dan memanipulasi strukturnya sendiri saat berjalan—membaca nama kelas, atribut, metode, konstruktor, dan anotasi tanpa perlu mengetahuinya saat kompilasi.

Mendapatkan Objek Kelas

Dapatkan objek Class<?> melalui literal, getClass(), atau Class.forName().

Class<String> c1 = String.class;           // literal
Class<?> c2 = "hello".getClass();           // from instance
Class<?> c3 = Class.forName("java.util.ArrayList"); // by name

Memeriksa Metadata Kelas

Ambil nama kelas, paket, kelas induk, dan antarmuka yang diimplementasikan dari objek Class.

Class<?> c = ArrayList.class;
System.out.println(c.getName());           // java.util.ArrayList
System.out.println(c.getSimpleName());     // ArrayList
System.out.println(c.getSuperclass());     // class java.util.AbstractList
for (Class<?> iface : c.getInterfaces()) System.out.println(iface.getName());

Mencantumkan Atribut yang Dideklarasikan

getDeclaredFields() mengembalikan semua atribut yang dideklarasikan dalam kelas, termasuk atribut pribadi. getFields() hanya mengembalikan atribut publik, termasuk atribut yang diwariskan.

for (Field f : User.class.getDeclaredFields()) {
    System.out.printf("%-10s %s%n", f.getType().getSimpleName(), f.getName());
}

Mencantumkan Metode

getDeclaredMethods() mencantumkan semua metode, apa pun tingkat aksesnya. Gunakan getMethods() untuk metode publik, termasuk yang diwariskan.

for (Method m : String.class.getDeclaredMethods()) {
    System.out.println(m.getName() + " -> " + m.getReturnType().getSimpleName());
}

Memeriksa Parameter Metode

Ambil tipe parameter, nama parameter (memerlukan tanda kompilator -parameters), dan anotasi.

Method m = UserService.class.getDeclaredMethod("findById", Long.class);
for (Parameter p : m.getParameters()) {
    System.out.println(p.getType().getSimpleName() + " " + p.getName());
}

Mencantumkan Konstruktor

Periksa konstruktor seperti halnya metode. getDeclaredConstructors() mencakup konstruktor pribadi yang digunakan dalam objek tunggal atau pembuat objek.

for (Constructor<?> c : User.class.getDeclaredConstructors()) {
    System.out.println(Arrays.toString(c.getParameterTypes()));
}

Membaca Anotasi

Ambil anotasi pada kelas, metode, atau atribut. Periksa keberadaannya dengan isAnnotationPresent dan ambil nilainya dengan getAnnotation.

@RestController
@RequestMapping("/users")
public class UserController {}

// Inspection:
RequestMapping rm = UserController.class.getAnnotation(RequestMapping.class);
if (rm != null) System.out.println("Path: " + Arrays.toString(rm.value()));

Memeriksa Modifier

Gunakan Modifier.isPublic(), isStatic(), isFinal(), dan sebagainya pada modifier atribut, metode, atau kelas untuk memfilter berdasarkan visibilitas.

for (Field f : User.class.getDeclaredFields()) {
    int mod = f.getModifiers();
    if (Modifier.isPrivate(mod)) System.out.println("private: " + f.getName());
}

Pemeriksaan isAssignableFrom dan instanceof

Gunakan Class.isAssignableFrom() untuk memeriksa kompatibilitas tipe secara terprogram—setara dengan instanceof, tetapi menggunakan objek kelas yang baru diketahui saat program berjalan.

Class<?> parent = Collection.class;
Class<?> child  = ArrayList.class;
System.out.println(parent.isAssignableFrom(child)); // true
System.out.println(child.isAssignableFrom(parent));  // false

Catatan tentang Performa

Refleksi 10–50× lebih lambat daripada kode langsung untuk akses atribut atau metode sederhana. Simpan objek Field dan Method dalam cache; panggil setAccessible(true) sekali lalu gunakan kembali.

private static final Field NAME_FIELD;
static {
    try { NAME_FIELD = User.class.getDeclaredField("name"); NAME_FIELD.setAccessible(true); }
    catch (NoSuchFieldException e) { throw new RuntimeException(e); }
}

Pemeriksaan Singkat

Metode mana yang mengembalikan atribut pribadi suatu kelas, tetapi bukan atribut yang diwariskan?

Rangkuman

Dapatkan Class melalui literal atau forName(). Gunakan getDeclaredFields/Methods/Constructors untuk memeriksa semua akses. Baca anotasi dengan getAnnotation. Simpan objek reflektif dalam cache untuk meningkatkan performa.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Inspeksi Class dengan Reflection” gratis?

Ya — teks lengkap “Inspeksi Class dengan Reflection” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Inspeksi Class dengan Reflection”?

Ambil objek Class dan periksa field, metode, konstruktor, serta anotasi saat runtime. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Inspeksi Class dengan Reflection” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Inspeksi Class dengan Reflection
  2. Memanggil Metode dan Mengakses Field
  3. Proksi Dinamis dengan InvocationHandler
  4. Kinerja Reflection dan Alternatifnya
← Kembali ke Java Academy