Kekacang Apache Commons

1. Gambaran keseluruhan

Apache Commons BeansUtils mengandungi semua alat yang diperlukan untuk bekerja dengan kacang Java.

Ringkasnya, kacang adalah kelas Java sederhana yang mengandungi ladang, pengambil / setter, dan pembina tanpa argumen.

Java menyediakan keupayaan refleksi dan introspeksi untuk mengenal pasti kaedah mendapatkan dan menetapkannya secara dinamik. Walau bagaimanapun, API ini sukar dipelajari dan mungkin memerlukan pembangun untuk menulis kod boilerplate untuk melakukan operasi yang paling mudah.

2. Pergantungan Maven

Inilah kebergantungan Maven yang perlu disertakan dalam fail POM sebelum menggunakannya:

 commons-beanutils commons-beanutils 1.9.3 

Versi terbaru boleh didapati di sini.

3. Membuat Kacang Jawa

Mari buat dua kelas kacang Kursus dan Pelajar dengan kaedah getter dan setter khas.

public class Course { private String name; private List codes; private Map enrolledStudent = new HashMap(); // standard getters/setters } 
public class Student { private String name; // standard getters/setters }

Kami mempunyai kelas Kursus yang mempunyai nama kursus, kod kursus dan pelbagai pelajar yang mendaftar. Pelajar yang mendaftar dikenal pasti dengan Id pendaftaran yang unik. Kelas kursus mengekalkan pelajar yang terdaftar dalam objek Peta di mana Id pendaftaran adalah kunci, dan objek pelajar akan menjadi nilai.

4. Akses Harta Tanah

Sifat kacang boleh dibahagikan kepada tiga kategori.

4.1. Harta Ringkas

Sifat bernilai tunggal juga dipanggil sederhana atau skalar.

Nilai mereka mungkin objek primitif (seperti int, float) atau jenis kompleks. BeanUtils mempunyai kelas PropertyUtils yang membolehkan kita mengubah sifat sederhana dalam Java Bean.

Berikut adalah contoh kod untuk menetapkan sifat:

Course course = new Course(); String name = "Computer Science"; List codes = Arrays.asList("CS", "CS01"); PropertyUtils.setSimpleProperty(course, "name", name); PropertyUtils.setSimpleProperty(course, "codes", codes);

4.2. Harta Terindeks

Properti yang diindeks mempunyai koleksi sebagai nilai yang dapat diakses secara individu menggunakan nombor indeks. Sebagai peluasan ke JavaBean, BeanUtils menganggap nilai jenis java.util.List juga diindeks.

Kita dapat mengubah nilai individu harta tanah yang diindeks menggunakan kaedah setIndexedProperty milik PropertyUtils .

Berikut adalah contoh pengubahsuaian kod harta indeks:

PropertyUtils.setIndexedProperty(course, "codes[1]", "CS02");

4.3. Harta yang dipetakan

Mana-mana harta yang mempunyai java.util.Map sebagai jenis yang mendasari disebut harta yang dipetakan. BeanUtils membolehkan kami mengemas kini nilai individu dalam peta menggunakan kunci bernilai String .

Berikut adalah contoh kod untuk mengubah nilai dalam harta yang dipetakan:

Student student = new Student(); String studentName = "Joe"; student.setName(studentName); PropertyUtils.setMappedProperty(course, "enrolledStudent(ST-1)", student);

5. Akses Harta Tanah Bersarang

Sekiranya nilai harta benda adalah objek dan kita perlu mengakses nilai harta benda di dalam objek itu - itu akan mengakses harta bersarang. PropertyUtils membolehkan kami mengakses dan mengubahsuai harta tanah bersarang juga.

Anggaplah kita mahu mengakses harta nama kelas Pelajar melalui objek Kursus . Kami mungkin menulis:

String name = course.getEnrolledStudent("ST-1").getName();

Kita boleh mengakses nilai harta tanah bersarang menggunakan getNestedProperty dan mengubah harta bersarang menggunakan kaedah setNestedProperty di PropertyUtils . Inilah kodnya:

Student student = new Student(); String studentName = "Joe"; student.setName(studentName); String nameValue = (String) PropertyUtils.getNestedProperty( course, "enrolledStudent(ST-1).name");

6. Salin Hartanah Kacang

Menyalin sifat satu objek ke objek lain sering membosankan dan ralat bagi pemaju. Kelas BeanUtils menyediakan kaedah copyProperties yang menyalin sifat objek sumber ke objek sasaran di mana nama harta benda sama di kedua objek.

Mari buat kelas kacang lain seperti Kursus yang kami buat di atas dengan harta yang sama kecuali ia tidak akan mendaftar Harta pelajar sebaliknya nama harta akan menjadi pelajar . Mari namakan kelas itu CourseEntity . Kelas akan kelihatan seperti:

public class CourseEntity { private String name; private List codes; private Map students = new HashMap(); // standard getters/setters }

Sekarang kita akan menyalin sifat objek Kursus ke objek CourseEntity :

Course course = new Course(); course.setName("Computer Science"); course.setCodes(Arrays.asList("CS")); course.setEnrolledStudent("ST-1", new Student()); CourseEntity courseEntity = new CourseEntity(); BeanUtils.copyProperties(courseEntity, course);

Ingat bahawa ini akan menyalin sifat dengan nama yang sama sahaja. Oleh itu, ia tidak akan menyalin harta yang didaftarkan Pelajar di kelas Kursus kerana tidak ada harta dengan nama yang sama di kelas CourseEntity .

7. Kesimpulannya

Dalam artikel ringkas ini, kami membaca kelas utiliti yang disediakan oleh BeanUtils . Kami juga melihat pelbagai jenis harta tanah dan bagaimana kami dapat mengakses dan mengubah nilai mereka.

Akhirnya, kami melihat untuk mengakses nilai harta benda bersarang dan menyalin sifat satu objek ke objek lain.

Sudah tentu, keupayaan refleksi dan introspeksi dalam Java SDK juga membolehkan kita mengakses harta benda secara dinamik tetapi sukar untuk dipelajari dan memerlukan beberapa kod plat boiler. BeanUtils membolehkan kita mengakses dan mengubah nilai-nilai ini dengan satu kaedah panggilan.

Coretan kod boleh didapati di GitHub.