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 để lấy một object của một class? Tạo một object từ bỏ relection như vậy nào? Cách nhằm truy cập private method của một lớp tự bên ngoài lớp đó…


1. Java reflection là gì?

Java reflection là một trong quá trình để khám nghiệm hoặc sửa thay đổi behavior của một class trên thời điểm run time.

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

2. Cách để lấy một instance của một class

Có 3 phương pháp để lấy instance của một class kia là:

forNamegetClass.class

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

lấy ví dụ về kiểu cách áp dụng forName bằng lịch trình đơ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 trái sau thời điểm chạy công tác trên:

*

Lý bởi vì ko tìm kiếm thấy ClassNameExample là vì ko truyền đủ package name.

Xem thêm: Hướng Dẫn Cách Tải Game Phong Thần, Hướng Dẫn Tải Game Phong Thần

Sử lại chương trình trên nlỗi 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 quả sau khoản thời gian chạy lịch trình trên:

*

2.3 lấy ví dụ như về getClass (java reflection)

ví dụ như một lịch trình dễ dàng và đơn giản về kiểu cách sử dụng getClass nlỗi 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 quả sau thời điểm chạy chương trình trên:

*

2.3 lấy một ví dụ về .class

lấy ví dụ như một chương trình dễ dàng và đơn giản về kiểu 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 khi chạy công tác trên:

*

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

Ví dụ một chương trình đơn giản dễ dàng để đánh giá type của một Class nhỏng 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 trái sau khi chạy công tác trên:

*

Bên cạnh đó còn có không ít các loại khác biệt như sau:

*

3. Sử dụng newInstance

lấy ví dụ như một công tác đơn giản và dễ dàng về kiểu cách thực hiện newInstance vào java reflection như sau:

package instance;class NewInstanceExample void print() System.out.println("Hello hufa.edu.vn"); public class NewInstanceEx public static void main(String<> args) IllegalAccessException ex) Kết trái sau khi chạy công tác trên:

*

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

Thêm một class Person.java bao gồm văn bản nhỏng 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 lịch trình cần sử dụng reflection vào java để lấy tất cả fields, methods cùng constructors của class Person như 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. điện thoại tư vấn hàm private từ 1 class khác

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

Xem thêm: Dota 2: Hướng Dẫn Tướng Ursa Trong Phiên Bản Mới, Hướng Dẫn Chơi Ursa (By Thiensu28694)

Để cung cấp các này, java có sẳn 2 package chính là java.lang.Classjava.lang.reflect.Method

Tạo class PrivateAccessEx.class tất cả 2 method private chính là print với print bao gồm tmê mẩn số nlỗi 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 để truy cập 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 khi chạy lịch trình trên: