Rumah > Java > javaTutorial > teks badan

Gabungan generik dan refleksi fungsi Java

WBOY
Lepaskan: 2024-04-28 10:30:02
asal
1052 orang telah melayarinya

Generik fungsi digabungkan dengan refleksi menghasilkan kod yang fleksibel dan berskala. Generik berfungsi menyokong jenis berparameter, manakala refleksi membenarkan mendapatkan semula metadata tentang kelas dan medan. Dengan menggabungkan kedua-duanya: anda boleh mencipta fungsi generik yang menerima parameter pelbagai jenis. Gunakan refleksi untuk mendapatkan maklumat kelas dan medan, walaupun jenis ditentukan pada masa jalan. Cipta fungsi fleksibel untuk jenis objek yang berbeza tanpa menulis kod khusus jenis.

Java 函数泛型与反射的结合使用

Generik fungsi Java digabungkan dengan refleksi

Pengenalan

Generik Java membolehkan kami mencipta jenis berparameter supaya jenis boleh ditentukan pada masa jalan. Refleksi membolehkan kami mendapatkan semula metadata tentang kelas, kaedah dan medan. Menggabungkan dua ciri berkuasa ini membolehkan anda mencipta kod yang fleksibel dan boleh skala.

Generik fungsi

Generik fungsi membolehkan kami mentakrifkan fungsi yang menerima pelbagai jenis parameter. Sebagai contoh, kita boleh mencipta fungsi generik yang menukar dua elemen tanpa mengisytiharkan jenis tertentu:

<T> void swap(T a, T b) {
  T temp = a;
  a = b;
  b = temp;
}
Salin selepas log masuk

Reflection

Reflection membolehkan kami mengakses maklumat masa jalan tentang kelas, kaedah dan medan. Kita boleh menggunakan refleksi untuk:

  • Dapatkan maklumat kelas, seperti nama kelas, kelas induk dan antara muka
  • Dapatkan maklumat medan, seperti jenis dan nilai medan
  • Kaedah panggilan, walaupun kaedah itu peribadi atau hanya diketahui pada masa jalan

Menggabungkan Generik Fungsian dengan Refleksi

Menggabungkan generik berfungsi dengan pantulan membolehkan kami mencipta kod yang fleksibel dan boleh dikembangkan untuk jenis objek yang berbeza. Sebagai contoh, kita boleh mencipta fungsi generik untuk menukar nilai objek kepada rentetan tanpa mengira jenisnya:

import java.lang.reflect.Field;

public class ObjectToStringConverter {
  public static <T> String convertToString(T object) {
    StringBuilder sb = new StringBuilder();
    Class<?> clazz = object.getClass();

    // 获取所有字段
    Field[] fields = clazz.getDeclaredFields();

    // 遍历所有字段并追加其名称和值
    for (Field field : fields) {
      try {
        field.setAccessible(true);
        sb.append(field.getName()).append(": ").append(field.get(object)).append("\n");
      } catch (IllegalAccessException e) {
        e.printStackTrace();
      }
    }

    return sb.toString();
  }
}
Salin selepas log masuk

Contoh praktikal:

Kita boleh menggunakan fungsi ini untuk jenis objek yang berbeza tanpa menulis Kod khusus jenis:

// 创建一个 Person 类
class Person {
  private String name;
  private int age;

  // ... 构造函数和 getter/setter ...
}

// 创建一个 Book 类
class Book {
  private String title;
  private String author;

  // ... 构造函数和 getter/setter ...
}

// 测试 convertToString 函数
Person person = new Person("John", 30);
Book book = new Book("Java Programming", "Author");

System.out.println(ObjectToStringConverter.convertToString(person));
System.out.println(ObjectToStringConverter.convertToString(book));
Salin selepas log masuk

Output:

name: John
age: 30
title: Java Programming
author: Author
Salin selepas log masuk

Atas ialah kandungan terperinci Gabungan generik dan refleksi fungsi Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan