Rumah  >  Artikel  >  Java  >  Bagaimana untuk melaksanakan mekanisme introspeksi Java

Bagaimana untuk melaksanakan mekanisme introspeksi Java

WBOY
WBOYke hadapan
2023-04-24 08:04:061587semak imbas

    Konsep

    JavaBean

    Dalam pengaturcaraan sebenar, kita sering memerlukan kelas yang membungkus objek nilai, seperti Pelajar, Pekerja, Pesanan, selalunya tiada kaedah perniagaan dalam kelas ini, hanya untuk merangkum objek entiti yang perlu diproses, mereka mempunyai ciri-ciri berikut:

    • Atribut semuanya bersifat peribadi; 🎜 >

    • Terdapat pembina awam tanpa parameter;
    • Contohnya: jika nama atribut ialah nama, terdapat kaedah getName yang mengembalikan nilai nama atribut dan kaedah setName yang menetapkan nilai nama, ambil perhatian bahawa nama kaedah biasanya get atau set ditambah atribut nama, dan huruf pertama nama atribut ditulis dengan huruf besar; kaedah ini dipanggil getters/setters mesti mempunyai nilai pulangan dan tiada parameter setter tidak mempunyai nilai pulangan dan mempunyai parameter kaedah;

      Sebagai contoh, contoh berikut:

    • Kelas yang memenuhi ciri-ciri ini dipanggil JavaBeans; Mekanisme Inspektor) adalah berdasarkan refleksi Bahasa Java mempunyai kekurangan atribut dan peristiwa kelas Bean.
    Selagi terdapat kaedah getXXX, atau kaedah setXXX, atau kedua-dua kaedah getXXX dan setXXX dalam kelas, kaedah getXXX tidak mempunyai parameter kaedah dan mempunyai nilai pulangan kaedah setXXX tidak mempunyai nilai pulangan dan mempunyai parameter kaedah; kemudian introspeksi Mekanisme menganggap XXX sebagai atribut

    Sebagai contoh, kod berikut

    Atribut umur tidak diisytiharkan sama sekali dalam kelas Pekerja, hanya pengambil seperti itu; dan setter diisytiharkan. Mekanisme introspeksi menganggap umur sebagai atribut

    Bagaimana untuk melaksanakan mekanisme introspeksi Java

    API Berkaitan

    Kelas dan antara muka utama yang berkaitan dengan introspeksi Java ialah:

    : Untuk mendapatkan sifat JavaBean, Peristiwa dan kaedah menyediakan kaedah standard; biasanya kaedah getBeanInfo digunakan untuk mengembalikan objek BeanInfo; secara langsung, dan objek jenis ini biasanya dikembalikan melalui kelas Introspektor, yang menyediakan Kaedah yang mengembalikan objek deskriptor harta (PropertyDescriptor), objek deskriptor kaedah (MethodDescriptor), dan objek deskriptor kacang (BeanDescriptor); >

    : digunakan untuk menerangkan atribut mempunyai kaedah pengambil dan penetap

    package com.shixun.introspector;
    
    public class Employee {
        private String name;
        private Double score;
    
        // age将被内省认为是属性
        public int getAge(){
            return 30;
        }
    
        // name将被内省认为是属性
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        // score将被内省认为是属性
        public Double getScore() {
            return score;
        }
    
        public void setScore(Double score) {
            this.score = score;
        }
    
        public static void main(String[] args) {
            
    
        }
    }
    Anda boleh menggunakan kaedah kelas PropertyDescriptor untuk mendapatkan maklumat berkaitan harta contoh, kaedah getName mengembalikan nama harta:

    Ia ditakrifkan dalam kelas PropertyDescriptor Kaedah boleh mendapatkan kaedah getter dan setter atribut

      Mari gunakan kod untuk meneroka secara mendalam:
    • Contoh kod: Dapatkan maklumat berkaitan atributjava.beans.Introspector类

      Pekerja seperti di atas Seperti yang ditunjukkan dalam kod, teruskan menulis fungsi utama untuk ujian
    • Mula-mula gunakan Antara muka BeanInfo untuk mendapatkan objek BeanInfo, dan kemudian dapatkan keterangan atribut PropertyDescriptor melalui objek BeanInfo

      Java.beans.BeanInfo接口

      Hasil yang dijalankan adalah seperti berikut:
    • Java.beans.PropertyDescriptor类

      Kita juga boleh memanggil kaedah get atau set yang diperoleh di sini melalui refleksi

    Hasil larian adalah seperti berikut:

    方法 方法描述
    Method getReadMethod() 回属性对应的getter方法对象;
    Method getWriteMethod() 回属性对应的setter方法对象;

    Semua kod dilampirkan di bahagian bawah! ! ! ! ! !

    Nota tentang introspeksi atribut

     //获取BeanInfo的对象
     BeanInfo employeeBeanInfo = Introspector.getBeanInfo(Employee.class);
     //通过BeanInfo对象获取PropertyDescriptor属性描述
     PropertyDescriptor[] propertyDescriptors = employeeBeanInfo.getPropertyDescriptors();
     System.out.println("通过Inspector内省机制获取JavaBean属性======= 打印所有信息 ====================");
     Arrays.stream(propertyDescriptors).forEach(f->{
         System.out.println("====================================");
         System.out.println("属性名:"+f.getName());
         System.out.println("类型:"+f.getPropertyType());
         System.out.println("get方法:"+f.getReadMethod());
         System.out.println("set方法:"+f.getWriteMethod());
     });
    
    // 或者用增强for
    System.out.println("通过Inspector内省机制获取JavaBean属性======= 打印所有信息 ====================");
    for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
    	System.out.println("====================================");
        System.out.println("名字:" + propertyDescriptor.getName());
        System.out.println("类型:" + propertyDescriptor.getPropertyType());
        System.out.println("get方法:" + propertyDescriptor.getReadMethod());
        System.out.println("set方法:" + propertyDescriptor.getWriteMethod());
    }

    Banyak rangka kerja menggunakan mekanisme introspeksi untuk mendapatkan semula atribut objek apabila mentakrifkan nama atribut, namanya ialah Paling baik, sekurang-kurangnya bermula dengan dua huruf kecil, seperti stuName, dan bukannya menggunakan sName Dalam sesetengah kes, ia mungkin menyebabkan pengambilan atribut gagal; atribut mengikut mekanisme introspeksi, Kaedah getter dan setter mengesahkan nama hartanah dan bukannya menentukannya berdasarkan nama pembolehubah ahli yang diisytiharkan dalam kelas; >

    Atas ialah kandungan terperinci Bagaimana untuk melaksanakan mekanisme introspeksi Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam