THỰC ĐƠN

Phản ánh Java được thực hiện dễ dàng

mục lục

Phản ánh Java được thực hiện dễ dàng

javacủasự phản xạGiới thiệu lớp tiện ích cho phép bạn dễ dàng sử dụng API.

Sự phản chiếu là gì?

API phản ánhrăng,"java.lang.reflect” bao gồm trong gói,
Đây là API truy xuất thông tin như các trường và phương thức từ các lớp Java.
Các lớp sau đây chủ yếu được sử dụng.

  • java.lang.Class
  • java.lang.reflect.Constructor
  • java.lang.reflect.Method
  • java.lang.reflect.Field

sự phản xạBằng cách sử dụng , bạn có thể tạo các lớp hoặc gọi các phương thức mà không cần phải mã hóa chúng trực tiếp.
Bạn có thể tạo một thể hiện của lớp từ một chuỗi hoặc thực thi một phương thức.

Bằng cách viết các định nghĩa về tên lớp và tên phương thức trong các tệp bên ngoài như XML, bạn có thể điều chỉnh linh hoạt ứng dụng theo những thay đổi của môi trường trong thời gian chạy.
Nó cũng là một API rất hiệu quả để xây dựng các ứng dụng có tính linh hoạt cao.


Mục đích phản ánh

sự phản xạthường không được người dùng sử dụng trực tiếp,
Nó được sử dụng rộng rãi trong các ứng dụng web như Struts và các framework như ánh xạ O/R.

Ví dụ: khi tự động đặt dữ liệu đầu vào màn hình web thành thuộc tính JavaBeans,
Nó được sử dụng khi phát hành SQL tự động cập nhật dựa trên các thuộc tính JavaBeans.

Ngoài ra, các chức năng như tải động và đăng ký các phần bổ trợ giúp mở rộng chức năng khi ứng dụng khởi động đều có sẵn.sự phản xạĐiều này có thể dễ dàng đạt được bằng cách sử dụng .

Chạy mẫu

Hãy chạy mẫu và trải nghiệm lập trình giống như framework.

Ở đây chúng tôi sử dụng lớp sausự phản xạTrình bày cách sử dụng đơn giản của tiện ích.

Main.java...Lớp được thực thi
BeanUtil.java...Lớp tiện ích phản chiếu
FreeSoft.java...Được sử dụng như một sự phản ánh trong một lớp đại diện cho phần mềm miễn phí.

●Khi thực hiện bình thường

System.out.println(“>>>Trường hợp bình thường”);
FreeSoft freeSoft = FreeSoft mới();
freeSoft.setName(“Trò chuyện&Messenger Trò chuyện và Messenger!!”);
freeSoft.showName();
freeSoft.showPrice(0);

●Khi được thực thi bằng cách sử dụng sự phản chiếu

System.out.println(“>>>Khi sử dụng phản xạ”);
// Tạo một thể hiện của lớp FreeSoft
Đối tượng gọiObject = BeanUtil.newInstance(“FreeSoft”);
// Đặt giá trị trong trường tên.
BeanUtil.setProperty(invokeObject, "tên" , “Trò chuyện&Messenger Trò chuyện và Messenger!!”);
// Thực thi phương thức showName() của FreeSoft.
BeanUtil.invoke(invokeObject, "hiện tên", vô giá trị);
// Thực thi phương thức showPrice() của FreeSoft.
// Nếu phương thức có các đối số, chúng phải được truyền dưới dạng mảng kiểu Đối tượng.
BeanUtil.invoke(invokeObject, "hiển thị giá",Đối tượng mới[]{Số nguyên mới(0)});

●Kết quả thực hiện

Kết quả thực thi đều giống nhau dù trong trường hợp bình thường hay khi sử dụng sự phản chiếu.

>>> Trường hợp bình thường

Tên phần mềm: Chat&MessengerTrò chuyện và nhắn tin! !

Giá: 0 yên

>>> Khi sử dụng sự phản chiếu

Tên phần mềm: Chat&MessengerTrò chuyện và nhắn tin! !

Giá: 0 yên

Chi tiết phương thức BeanUtil

phiên bản mới

đối tượng tĩnh công cộng phiên bản mới(String className) ném ngoại lệ
Tạo và trả về một thể hiện từ chuỗi "className".

Thông số:
tên lớp – Tên lớp đầy đủ
Giá trị trả về:
Một phiên bản mới của tên lớp đủ điều kiện
ngoại lệ:
Ngoại lệ

phiên bản mới

đối tượng tĩnh công cộng phiên bản mới(String className, Object[] argObj) ném ngoại lệ
Tạo và trả về một thể hiện từ chuỗi "className".

Thông số:
tên lớp – Tên lớp đầy đủ
argObj – Đối số hàm tạo
Giá trị trả về:
Một phiên bản mới của tên lớp đủ điều kiện
ngoại lệ:
Ngoại lệ

phiên bản mới

đối tượng tĩnh công cộng phiên bản mới(Lớp clazz) ném Ngoại lệ
Tạo và trả về một thể hiện từ lớp "clazz".

Thông số:
clazz - lớp học
Giá trị trả về:
phiên bản mới của clazz
ngoại lệ:
Ngoại lệ

phiên bản mới

đối tượng tĩnh công cộng phiên bản mới(Class clazz, Object[] argObj) ném Ngoại lệ
Tạo và trả về một thể hiện từ lớp "clazz".

Thông số:
clazz - lớp học
argObj – Đối số hàm tạo
Giá trị trả về:
phiên bản mới của clazz
ngoại lệ:
Ngoại lệ

setProperty

khoảng trống tĩnh công cộng setProperty(Đối tượng gọiObject, Tên trường chuỗi, Giá trị đối tượng) ném Ngoại lệ
Gọi phương thức setter của trường "fieldName" của đối tượng "invokeObject" và lưu giá trị "value".

Nếu không có phương thức setter, giá trị sẽ được đặt trực tiếp vào trường. Tuy nhiên, trong trường hợp này, công cụ sửa đổi truy cập của thuộc tính đích phải ở chế độ công khai.

Thông số:
gọi đối tượng – Đối tượng thực hiện
tên trường – Tên thuộc tính của đối tượng được thực thi
giá trị – Giá trị cần thiết lập
ngoại lệ:
Ngoại lệ – Xảy ra ngoại lệ sau.
Đưa ra những mục tiêu ngoại lệ – Nếu phương thức cơ bản ném ra một ngoại lệ
Truy cập bất hợp phápNgoại lệ – Đối tượng Method này là Java
Khi kiểm soát truy cập ngôn ngữ được triển khai và không thể truy cập phương thức cơ bản
NoSuchMethodNgoại lệ – Nếu không tìm thấy phương thức có tên được chỉ định

nhận được tài sản

đối tượng tĩnh công cộng nhận được tài sản(Đối tượng gọiObject, Tên trường chuỗi) ném Ngoại lệ
Gọi phương thức getter của trường fieldName của đối tượnggọiObject để lấy giá trị.
Nếu không có phương thức getter, giá trị sẽ được lấy trực tiếp từ trường. Tuy nhiên, trong trường hợp này, công cụ sửa đổi truy cập của thuộc tính đích phải ở chế độ công khai.

Thông số:
gọi đối tượng – Đối tượng thực hiện
tên trường – Tên thuộc tính của đối tượng được thực thi
Giá trị trả về:
Giá trị trả về của phương thức Getter
ngoại lệ:
Ngoại lệ – Xảy ra ngoại lệ sau.
Đưa ra những mục tiêu ngoại lệ – Nếu phương thức cơ bản ném ra một ngoại lệ
Truy cập bất hợp phápNgoại lệ – Đối tượng Method này là Java
Khi kiểm soát truy cập ngôn ngữ được triển khai và không thể truy cập phương thức cơ bản
NoSuchFieldException – Nếu không tìm thấy trường có tên được chỉ định

gọi

đối tượng tĩnh công cộng gọi(Đối tượng InvocateObject, String callMethod, Object[] argObjects) ném ra InvocationTargetException, IllegalAccessException, NoSuchMethodException
Thực thi phương thức "callMethod" của đối tượng "invokeObject".
Nếu có giá trị trả về, nó có thể được lấy dưới dạng Đối tượng.

Thông số:
gọi đối tượng – Đối tượng thực hiện
phương thức gọi – Tên phương thức được thực thi
đối tượng arg – Nếu có đối số, chuyển chúng dưới dạng mảng đối tượng. Nếu không có đối số, chuyển null.
Giá trị trả về:
Giá trị trả về khi thực thi "callMethod"
ngoại lệ:
Đưa ra những mục tiêu ngoại lệ – Nếu phương thức cơ bản ném ra một ngoại lệ
Truy cập bất hợp phápNgoại lệ – Đối tượng Method này là Java
Khi kiểm soát truy cập ngôn ngữ được triển khai và không thể truy cập phương thức cơ bản
NoSuchMethodNgoại lệ – Nếu không tìm thấy phương thức có tên được chỉ định

phương thức tìm kiếm

phương pháp tĩnh công khai phương thức tìm kiếm(Đối tượng InvocateObject, String callMethod, Object[] argObjects) ném ra ngoại lệ NoSuchMethodException
Tìm kiếm phương thức 'callMethod' của đối tượng 'invokeObject'.

Thông số:
gọi đối tượng – Đối tượng thực hiện
phương thức gọi – Tên phương thức của đối tượng được thực thi
đối tượng arg – Nếu có đối số, chuyển chúng dưới dạng mảng đối tượng. Nếu không có đối số, chuyển null.
Giá trị trả về:
Đối tượng Phương thức khớp với các điều kiện đối số đã chỉ định
ngoại lệ:
NoSuchMethodNgoại lệ – Nếu không tìm thấy phương thức phù hợp hoặc nếu tên là “” hoặc “”

setField

khoảng trống tĩnh công cộng setField(Đối tượng gọiObject, Tên trường chuỗi, Giá trị đối tượng) ném IllegalAccessException, NoSuchFieldException
Lưu trữ giá trị "giá trị" trong tên trường "fieldName" của đối tượng được thực thi "invokeObject".

Thông số:
gọi đối tượng – Đối tượng thực hiện
tên trường – Tên trường của đối tượng được thực thi
giá trị – Giá trị cần thiết lập
ngoại lệ:
Truy cập bất hợp phápNgoại lệ – Trường dựa trên đối tượng được chỉ định (hoặc lớp con hoặc trình triển khai của nó)
không phải là một phiên bản của lớp hoặc giao diện mà nó khai báo hoặc nếu quá trình chuyển đổi hủy gói không thành công
NoSuchFieldException – Nếu không tìm thấy trường có tên được chỉ định

getField

đối tượng tĩnh công cộng getField(Đối tượng gọiObject, Tên trường chuỗi) ném IllegalAccessException, NoSuchFieldException
Lấy giá trị của tên trường "fieldName" của đối tượng được thực thi "invokeObject".

Thông số:
gọi đối tượng – Đối tượng thực hiện
tên trường – Tên trường của đối tượng được thực thi
Giá trị trả về:
giá trị trả về
ngoại lệ:
Truy cập bất hợp phápNgoại lệ – Trường dựa trên đối tượng được chỉ định (hoặc lớp con hoặc trình triển khai của nó)
không phải là một phiên bản của lớp hoặc giao diện mà nó khai báo hoặc nếu quá trình chuyển đổi hủy gói không thành công
NoSuchFieldException – Nếu không tìm thấy trường có tên được chỉ định

hasField

boolean tĩnh công khai hasField(Đối tượng đối tượng, Tên trường chuỗi) ném Ngoại lệ
Kiểm tra xem đối tượng 'đối tượng' có khai báo tên trường 'fieldName' hay không.

Thông số:
sự vật – Đối tượng cần kiểm tra
tên trường – Tên trường cần kiểm tra
Giá trị trả về:
đúng nếu được khai báo
ngoại lệ:
Ngoại lệ

getAllFields

java.util.TreeSet tĩnh công khai getAllFields(Đối tượng) ném Ngoại lệ
Thông số:
sự vật
Giá trị trả về:
ngoại lệ:
Ngoại lệ

getShortClassName

Chuỗi tĩnh công khai getShortClassName(Đối tượng đối tượng)
Lấy tên lớp không đủ tiêu chuẩn từ một đối tượng.

Thông số:
sự vật
Giá trị trả về:

getShortClassName

Chuỗi tĩnh công khai getShortClassName(Tên lớp chuỗi)
Lấy tên lớp từ tên đủ điều kiện.

Thông số:
tên lớp
Giá trị trả về:

lấy tên trường

Chuỗi tĩnh công khai lấy tên trường(Tên phương thức chuỗi)
Thay đổi tên trường từ tên phương thức. Phải tuân thủ các quy ước của JavaBeans.

Thông số:
tên phương thức
Giá trị trả về:

isClassExist

boolean tĩnh công khai isClassExist(Tên lớp chuỗi)
Xác minh rằng tên đủ điều kiện "className" là tên lớp hiện có.

Thông số:
tên lớp
Giá trị trả về:

getPropertyDescriptors

Bộ mô tả thuộc tính tĩnh công khai[] getPropertyDescriptors(Đối tượng) ném IntrospectionException
Trả về một Bộ mô tả thuộc tính chứa thông tin đối tượng cho "đối tượng".

Thông số:
sự vật
Giá trị trả về:
ngoại lệ:
java.beans.IntrospectionException

Mã nguồn BeanUtil

  • URLをコピーしました!
mục lục