Java reflection là gì

Mục đích của bài viết này là khám phá về java reflection. Java reflection là gì? Cách để mang một object của một class? Tạo một object tự relection như vậy nào? Cách để truy vấn private method của một tấm tự phía bên ngoài lớp đó…


1. Java reflection là gì?

Java reflection là 1 trong những quy trình nhằm kiểm soát hoặc sửa đổi behavior của một class tại thời điểm run time.

Bạn đang xem: Java reflection là gì

2. Cách để đưa một instance của một class

Có 3 cách để mang instance của một class kia là:

forNamegetClass.class

2.1 lấy ví dụ như về forName (java reflection)

lấy ví dụ như về kiểu cách áp dụng forName bằng công tác dễ dàng và đơn giản sau:

package instance;class ClassNameExample public class ForNameEx public static void main(String<> args) try Class c = Class.forName("ClassNameExample"); System.out.println("class name: " + c.getName()); catch (Exception ex) System.out.println("Has a exception: " + ex.getMessage()); Kết quả sau khoản thời gian chạy chương trình trên:

*

Lý do ko tra cứu thấy ClassNameExample là do ko truyền đủ package name.

Xem thêm: Mách Bạn Cách Nấu Nước Đậu Đỏ Tốt Không? Cách Thực Hiện Món Nước Đậu Đỏ Rang

Sử lại chương trình trên như sau:

package instance;class ClassNameExample public class ForNameEx public static void main(String<> args) try Class c = Class.forName("instance.ClassNameExample"); System.out.println("class name: " + c.getName()); catch (Exception ex) System.out.println("Has a exception: " + ex.getMessage()); Kết trái sau khi chạy chương trình trên:

*

2.3 Ví dụ về getClass (java reflection)

lấy ví dụ một công tác dễ dàng và đơn giản về phong thái thực hiện getClass nhỏng sau:

package instance;class GetClassExample public class GetClassEx void printClassName(Object obj) Class c = obj.getClass(); System.out.println("Class simple name: " + c.getSimpleName()); System.out.println("Class full name: " + c.getName()); public static void main(String<> args) GetClassExample getClassExample = new GetClassExample(); GetClassEx getClassEx = new GetClassEx(); getClassEx.printClassName(getClassExample); Kết trái sau khoản thời gian chạy lịch trình trên:

*

2.3 ví dụ như về .class

ví dụ như một lịch trình dễ dàng về cách thực hiện .class nhỏng sau:

package instance;public class DotClassEx public static void main(String<> args) Class c = Integer.class; System.out.println("Simple name: " + c.getSimpleName()); System.out.println("Full name: " + c.getName()); Class c1 = DotClassEx.class; System.out.println(" Simple name: " + c1.getSimpleName()); System.out.println("Full name: " + c1.getName()); Kết quả sau thời điểm chạy công tác trên:

*

2.4 Xác định nhiều loại của Class

lấy ví dụ một lịch trình đơn giản và dễ dàng nhằm chất vấn type của một Class nlỗi sau:

package instance;interface InExpublic class TypeClassEx public static void main(String<> args) Class c1 = InEx.class; System.out.println("Is interface: " + c1.isInterface()); Class c2 = boolean.class; System.out.println(" Is primary: " + c2.isPrimitive()); Kết quả sau khi chạy chương trình trên:

*

Dường như còn có rất nhiều nhiều loại khác nhau như sau:

*

3. Sử dụng newInstance

lấy một ví dụ một chương trình đơn giản dễ dàng về cách sử dụng newInstance vào java reflection nhỏng sau:

package instance;class NewInstanceExample void print() System.out.println("Hello thongcongnghetaz.com"); public class NewInstanceEx public static void main(String<> args) IllegalAccessException ex) Kết quả sau thời điểm chạy công tác trên:

*

4. lấy ví dụ để đưa fields, methods của một class

Thêm một class Person.java gồm câu chữ nlỗi sau:

package reflectex;public class Person private String id; protected String name; public String phone; Integer old; private void test() System.out.println("----------------test"); public void test2() System.out.println("----------------test2"); protected void test3() System.out.println("----------------test3"); Viết chương trình dùng reflection vào java để lấy tất cả fields, methods và constructors của class Person nhỏng sau:

package reflectex;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class ReflectExample { public static void main(String<> args) throws ClassNotFoundException { Class p = Class.forName("reflectex.Person"); System.out.println(" ------------Fields: "); Field<> fields = p.getDeclaredFields(); for(int i = 0; i Kết trái sau khi chạy chương trình trên nhỏng sau:

*

5. hotline hàm private xuất phát từ 1 class khác

cũng có thể Hotline hàm private của một class tự bên phía ngoài class đó bằng phương pháp đổi khác runtime behavior của class kia.

Xem thêm: Mucocele Là Gì - Bổng Nhiên Có Cục Bướu Trên Môi, Bệnh Gì

Để cung ứng các này, java có sẳn 2 package sẽ là java.lang.Class cùng java.lang.reflect.Method

Tạo class PrivateAccessEx.class bao gồm 2 method private chính là print cùng print tất cả tmê say số như sau:

package privateaccess;public class PrivateAccessEx private String name; private void print() System.out.println("This is a private method"); private void print(String name) System.out.println(String.format("This is a private method with parameter, name param: %s", name)); Tạo class PrivateAccessExample nhằm truy vấn method private của class PrivateAccessEx.

package privateaccess;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class PrivateAccessExample public static void main(String<> args) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException Class c = PrivateAccessEx.class; Object o = c.newInstance(); Method method = c.getDeclaredMethod("print"); method.setAccessible(true); method.invoke(o); Method method1 = c.getDeclaredMethod("print", String.class); method1.setAccessible(true); method1.invoke(o,"Nguyen Van A"); Kết trái sau khoản thời gian chạy công tác trên:


Chuyên mục: Blogs