Động lực học lập trình Java, Phần 2: Giới thiệu sự phản chiếu Sử dụng thông tin lớp trong thời gian chạy để khởi động việc lập trình của bạn pps

20 490 0
Động lực học lập trình Java, Phần 2: Giới thiệu sự phản chiếu Sử dụng thông tin lớp trong thời gian chạy để khởi động việc lập trình của bạn pps

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Động lực học lập trình Java, Phần 2: Giới thiệu phản chiếu Sử dụng thông tin lớp thời gian chạy để khởi động việc lập trình bạn Dennis Sosnoski, Nhà tư vấn, Sosnoski Software Solutions, Inc Tóm tắt: Sự phản chiếu cho phép truy cập mã bạn tới thông tin bên lớp nạp vào JVM cho phép bạn viết mã để làm việc với lớp lựa chọn q trình thực hiện, khơng phải mã nguồn Điều tạo cho phản chiếu công cụ quan trọng để xây dựng ứng dụng linh hoạt Nhưng xem sử dụng khơng thích hợp, phản chiếu tốn Trong Phần loạt chất tảng Java, nhà tư vấn phần mềm Dennis Sosnoski đưa giới thiệu cách sử dụng phản chiếu, xem xét số chi phí liên quan Bạn tìm hiểu cách Java Reflection API (API phản chiếu Java) cho phép bạn kết nối vào đối tượng thời gian chạy Trong "Động lực học lập trình Java, Phần 1," tơi cung cấp cho bạn giới thiệu lớp lập trình Java nạp lớp Bài viết mơ tả số tư liệu thơng tin rộng lớn theo định dạng lớp nhị phân Java Trong viết tháng này, tơi trình bày điều việc sử dụng Java Reflection API để truy cập sử dụng số thông tin thời gian chạy Để giúp trì điều thú vị với nhà phát triển, người biết điều phản chiếu, tơi trình bày nhìn cách so sánh hiệu phản chiếu với truy cập trực tiếp Đừng bỏ lỡ phần lại loạt Phần 1, "Các lớp Java nạp lớp" (04.2003) Phần 3, "Ứng dụng phản chiếu" (07.2003) Phần 4, "Chuyển đổi lớp Javassist" (09.2003) Phần 5, "Việc chuyển lớp hoạt động" (02.2004) Phần 6, "Các thay đổi hướng-khía cạnh với Javassist" (03.2004) Phần 7, "Kỹ thuật bytecode với BCEL" (04.2004) Phần 8, "Thay phản chiếu việc tạo mã" (06.2004) Sử dụng phản chiếu khác với lập trình Java tiêu chuẩn chỗ làm việc với siêu liệu liệu mô tả liệu khác Kiểu siêu liệu cụ thể truy cập phản chiếu ngôn ngữ Java mô tả lớp đối tượng bên JVM Sự phản chiếu cho phép bạn truy cập thời gian chạy đến loạt thơng tin lớp Thậm chí cịn cho phép bạn đọc viết trường phương thức gọi lớp chọn thời gian chạy Sự phản chiếu cơng cụ mạnh Nó cho phép bạn xây dựng mã linh hoạt, mã lắp ráp thời gian chạy mà khơng địi hỏi liên kết mã nguồn thành phần Nhưng số khía cạnh phản chiếu khó hiểu Trong này, tơi vào lý bạn không muốn sử dụng phản chiếu chương trình bạn, lý bạn muốn Sau bạn biết thỏa hiệp, bạn định cho lợi ích có giá trị hạn chế Lớp người bắt đầu Điểm khởi đầu để sử dụng phản chiếu luôn cá thể java.lang.Class Nếu bạn muốn làm việc với lớp định sẵn, ngơn ngữ Java cung cấp phím tắt dễ dàng để có cá thể Class trực tiếp: Class clas = MyClass.class; Khi bạn sử dụng kỹ thuật này, tất công việc liên quan đến việc nạp lớp diễn hậu trường Tuy nhiên, bạn cần phải đọc tên lớp thời gian chạy từ số nguồn bên ngồi, cách tiếp cận thực Thay vào đó, bạn cần phải sử dụng trình nạp lớp để tìm thơng tin lớp Dưới cách để thực điều đó: // "name" is the class name to load Class clas = null; try { clas = Class.forName(name); } catch (ClassNotFoundException ex) { // handle exception case } // use the loaded class Nếu lớp nạp, bạn tìm lại thơng tin Class có Nếu lớp chưa nạp, trình nạp lớp nạp trả cá thể lớp vừa xây dựng Sự phản chiếu lớp Đối tượng Class mang đến cho bạn tất kết nối để truy cập phản chiếu đến siêu liệu lớp Siêu liệu bao gồm thơng tin lớp đó, chẳng hạn gói siêu lớp lớp đó, giao diện lớp triển khai thực Nó bao gồm chi tiết hàm tạo, trường phương thức lớp xác định Các mục sau thứ thường sử dụng lập trình, tơi đưa số ví dụ làm việc với chúng sau phần Hỏi chuyên gia: Dennis Sosnoski vấn đề JVM bytecode Đối với ý kiến hay câu hỏi tài liệu trình bày loạt này, điều khác có liên quan đến Java bytecode, định dạng lớp nhị phân Java vấn đề JVM chung, truy cập vào diễn đàn thảo luận JVM Bytecode, Dennis Sosnoski kiểm soát Đối với ba kiểu thành phần lớp hàm tạo (constructor), trường phương thức java.lang.Class cung cấp bốn gọi thể phản chiếu riêng biệt để truy cập thông tin theo nhiều cách khác Tất gọi theo sau dạng chuẩn Đây tập sử dụng để tìm hàm tạo:  Constructor getConstructor(Class[] params) Tìm hàm tạo cơng khai cách sử dụng kiểu tham số cụ thể  Constructor[] getConstructors() Tìm tất hàm tạo cơng khai cho lớp  Constructor getDeclaredConstructor(Class[] params) Tìm hàm tạo (bất kể mức truy cập) cách sử dụng kiểu tham số cụ thể  Constructor[] getDeclaredConstructors() Tìm tất hàm tạo (bất kể mức truy cập) cho lớp Mỗi gọi trả nhiều cá thể java.lang.reflect.Constructor Lớp Constructor định nghĩa phương thức newInstance lấy mảng đối tượng làm đối số nó, sau trả cá thể vừa xây dựng lớp gốc Mảng đối tượng giá trị tham số sử dụng cho gọi hàm tạo Như ví dụ cách làm việc này, giả sử bạn có lớp TwoString với hàm tạo lấy cặp String, thể Liệt kê 1: Liệt kê Lớp xây dựng từ cặp strings public class TwoString { private String m_s1, m_s2; public TwoString(String s1, String s2) { m_s1 = s1; m_s2 = s2; } } Mã hiển thị Liệt kê tìm hàm tạo sử dụng để tạo cá thể lớp TwoString sử dụng Strings "a" "b": Liệt kê Cuộc gọi phản chiếu cho hàm tạo Class[] types = new Class[] { String.class, String.class }; Constructor cons = TwoString.class.getConstructor(types); Object[] args = new Object[] { "a", "b" }; TwoString ts = (TwoString)cons.newInstance(args); Mã Liệt kê bỏ qua số kiểu ngoại lệ kiểm tra phương thức phản chiếu khác đưa Các ngoại lệ trình bày chi tiết mơ tả Javadoc API, ngắn gọn, để chúng ngồi ví dụ Trong tơi nói chủ đề hàm tạo, ngơn ngữ lập trình Java định nghĩa phương thức phím tắt đặc biệt mà bạn sử dụng để tạo cá thể lớp hàm tạo no-argument (hoặc mặc định) Phím tắt nhúng vào định nghĩa Class riêng sau: Object newInstance() Xây dựng cá thể sử dụng hàm tạo mặc định Mặc dù cách tiếp cận cho phép bạn sử dụng hàm tạo cụ thể, tạo phím tắt tiện lợi thứ bạn muốn Kỹ thuật đặc biệt có ích làm việc với JavaBeans, JavaBeans dùng để xác định hàm tạo công khai, khơng có đối số (no-argument) Các trường phản chiếu Các gọi phản chiếu Class (lớp) nhằm truy cập thông tin trường tương tự gọi dùng để truy cập hàm tạo, với tên trường sử dụng thay cho mảng kiểu tham số:  Field getField(String name) Tìm trường cơng khai có tên  Field[] getFields() Tìm tất trường cơng khai lớp  Field getDeclaredField(String name) Tìm trường có tên lớp khai báo  Field[] getDeclaredFields() Tìm tất trường lớp khai báo Mặc dù có tương đồng với gọi hàm tạo, có khác biệt quan trọng nói đến trường: hai trường trả thông tin cho trường cơng khai để truy cập chúng thơng qua lớp lớp thừa kế từ lớp ông bà Hai trường cuối trả thông tin cho trường lớp khai báo trực tiếp không phân biệt kiểu truy cập trường Các cá thể java.lang.reflect.Field gọi trả định nghĩa phương thức getXXX setXXX cho tất kiểu nguyên thủy, phương thức get set chung làm việc với tham chiếu đối tượng Nó cho bạn định sử dụng phương thức thích hợp dựa kiểu trường thực tế, phương thức getXXX xử lý tự động biến đổi mở rộng (như sử dụng phương thức getInt để lấy giá trị byte) Liệt kê cho thấy ví dụ việc sử dụng phương thức phản chiếu trường, dạng phương thức để tăng trường int đối tượng theo tên: Liệt kê Tăng trường phản chiếu public int incrementField(String name, Object obj) throws { Field field = obj.getClass().getDeclaredField(name); int value = field.getInt(obj) + 1; field.setInt(obj, value); return value; } Phương thức bắt đầu hiển thị số tính linh hoạt với phản chiếu Thay làm việc với lớp cụ thể, incrementField sử dụng phương thức getClass đối tượng chuyển qua để tìm thơng tin lớp, sau trực tiếp tìm trường có tên lớp Các phương thức phản chiếu Sự phản chiếu Class gọi truy cập thông tin phương thức giống với phản chiếu sử dụng cho hàm tạo trường:  Method getMethod(String name, Class[] params) Tìm phương thức cơng khai có tên cách sử dụng kiểu tham số cụ thể  Method[] getMethods() Tìm tất phương thức công khai lớp  Method getDeclaredMethod(String name, Class[] params) Tìm phương thức cơng khai có tên lớp khai báo cách sử dụng kiểu tham số cụ thể  Method[] getDeclaredMethods() Tìm tất phương thức lớp khai báo Như với gọi trường, hai phương thức trả thơng tin cho phương thức cơng khai truy cập thơng qua lớp đó, lớp thừa kế từ lớp ơng bà Hai phương thức cuối trả thông tin cho phương thức lớp khai báo trực tiếp, mà không liên quan đến kiểu truy cập phương thức Các cá thể java.lang.reflect.Method gọi trả định nghĩa phương thức invoke (gọi) mà bạn sử dụng để gọi phương thức cá thể lớp định nghĩa Phương thức invoke lấy hai đối số cung cấp cá thể lớp mảng giá trị tham số cho gọi Liệt kê đưa ví dụ trường tiến thêm bước, hiển thị ví dụ phản chiếu phương thức hành động Phương thức làm tăng thuộc tính int JavaBean xác định phương thức get set Ví dụ, đối tượng xác định phương thức getCount setCount cho giá trị count (đếm) số ngun, bạn vượt qua "count" tham số name gọi đến phương thức để tăng giá trị Liệt kê Làm tăng thuộc tính JavaBean phản chiếu public int incrementProperty(String name, Object obj) { String prop = Character.toUpperCase(name.charAt(0)) + name.substring(1); String mname = "get" + prop; Class[] types = new Class[] {}; Method method = obj.getClass().getMethod(mname, types); Object result = method.invoke(obj, new Object[0]); int value = ((Integer)result).intValue() + 1; mname = "set" + prop; types = new Class[] { int.class }; method = obj.getClass().getMethod(mname, types); method.invoke(obj, new Object[] { new Integer(value) }); return value; } Để thực theo quy ước JavaBeans, biến đổi chữ đầu thuộc tính tên thành chữ hoa, sau dựa vào get để xây dựng tên phương thức đọc set để xây dựng tên phương thức viết Các phương thức đọc JavaBeans trả giá trị viết phương thức lấy giá trị làm tham số nhất, tơi định kiểu tham số cho phương thức cho phù hợp Cuối cùng, quy ước địi hỏi phương thức cơng khai, tơi sử dụng dạng tra cứu thơng tin để tìm phương thức cơng khai có khả gọi lớp Ví dụ ví dụ mà chuyển qua giá trị nguyên thủy sử dụng phản chiếu, xem xét cách làm Nguyên tắc đơn giản: bạn cần phải chuyển qua giá trị nguyên thủy, cần thay cá thể lớp trình bao (wrapper) tương ứng (được định nghĩa gói java.lang cho kiểu nguyên thủy Điều áp dụng cho gọi trả Vì vậy, tơi gọi phương thức get ví dụ tơi, tơi chờ đợi kết trình bao java.lang.Integer cho giá trị thuộc tính int thực Phản chiếu mảng Các mảng đối tượng ngôn ngữ lập trình Java Giống tất đối tượng, chúng có lớp Nếu bạn có mảng, bạn nhận lớp mảng sử dụng phương thức getClass chuẩn, giống với đối tượng khác Tuy nhiên, việc nhận lớp mà khơng có cá thể có làm việc khác với kiểu đối tượng khác Ngay sau bạn có lớp mảng khơng có nhiều lớp bạn làm việc trực tiếp với nó, việc truy cập hàm tạo phản chiếu cho lớp thông thường đưa không làm việc với mảng mảng khơng có trường dễ truy cập Các phương thức java.lang.Object định nghĩa cho đối tượng mảng Việc xử lý đặc biệt mảng sử dụng tập hợp phương thức tĩnh lớp java.lang.reflect.Array cung cấp Các phương thức lớp cho phép bạn tạo mảng mới, nhận chiều dài đối tượng mảng đọc viết giá trị có mục đối tượng mảng Liệt kê cho thấy phương thức hữu ích để thay đổi kích thước mảng có cách hiệu Nó sử dụng phản chiếu để tạo mảng kiểu, sau chép tất liệu suốt từ mảng cũ trước trả mảng Liệt kê Phát triển mảng phản chiếu public Object growArray(Object array, int size) { Class type = array.getClass().getComponentType(); Object grown = Array.newInstance(type, size); System.arraycopy(array, 0, grown, 0, Math.min(Array.getLength(array), size)); return grown; } An ninh phản chiếu An ninh vấn đề phức tạp đối phó với phản chiếu Mã kiểukhung công tác thường sử dụng phản chiếu với điều bạn muốn khung cơng tác có truy cập đầy đủ tới mã bạn mà không cần quan tâm hạn chế truy cập thông thường Tuy việc truy cập khơng kiểm sốt tạo nguy an ninh trường hợp khác, chẳng hạn mã thi hành môi trường chia sẻ mã không đáng tin cậy Do nhu cầu xung đột nhau, nên ngôn ngữ lập trình Java định nghĩa cách tiếp cận đa cấp để xử lý an ninh phản chiếu Các chế độ bắt tuân theo hạn chế phản chiếu áp dụng cho việc truy cập mã nguồn:  Truy cập từ đâu tới thành phần công khai lớp  Khơng truy cập bên ngồi lớp riêng tới thành phần riêng  Truy cập có giới hạn tới thành phần bảo vệ thành phần gói (truy cập mặc định) Tuy nhiên có cách đơn giản xung quanh hạn chế có Tất lớp Constructor, Field, Method mà sử dụng ví dụ trước mở rộng lớp sở chung lớp java.lang.reflect.AccessibleObject Lớp định nghĩa phương thức setAccessible cho phép bạn bật tắt kiểm tra truy cập cho cá thể lớp Việc bắt giữ (catch) có trình quản lý an ninh, kiểm tra xem mã tắt kiểm tra truy cập có cho phép làm khơng Nếu khơng cho phép, trình quản lý an ninh đưa lỗi ngoại lệ Liệt kê giải thích chương trình có sử dụng phản chiếu cá thể lớp TwoString Liệt kê để hiển thị điều hoạt động: Liệt kê An ninh phản chiếu hoạt động public class ReflectSecurity { public static void main(String[] args) { try { TwoString ts = new TwoString("a", "b"); Field field = clas.getDeclaredField("m_s1"); // field.setAccessible(true); System.out.println("Retrieved value is " + field.get(inst)); } catch (Exception ex) { ex.printStackTrace(System.out); } } } Nếu bạn biên dịch mã chạy trực tiếp từ dịng lệnh mà khơng có tham số đặc biệt nào, đưa IllegalAccessException gọi field.get(inst) Nếu bạn khơng ghi dịng field.setAccessible(true) ), sau biên dịch lại chạy mã đó, thành cơng Cuối cùng, bạn thêm tham số JVM Djava.security.manager dịng lệnh để kích hoạt trình quản lý an ninh, lần khơng thành cơng, trừ bạn xác định quyền truy cập cho lớp ReflectSecurity Hiệu phản chiếu Sự phản chiếu công cụ mạnh, bị vài hạn chế Một nhược điểm ảnh hưởng hiệu Khi sử dụng phản chiếu hoạt động giải thích, bạn lệnh cho JVM bạn muốn làm thực cho bạn Kiểu hoạt động chậm so với việc thực trực tiếp hoạt động Để giải thích chi phí hiệu việc sử dụng phản chiếu, tơi chuẩn bị tập chương trình chuẩn cho (xem Tài nguyên để có đường liên kết đến mã đầy đủ) Liệt kê cho thấy đoạn trích từ việc thử nghiệm hiệu truy cập trường, bao gồm phương pháp thử nghiệm Mỗi phương thức thử nghiệm dạng truy cập vào trường accessSame làm việc với trường thành viên đối tượng, accessOther sử dụng trường đối tượng khác truy cập trực tiếp accessReflection sử dụng trường đối tượng khác phản chiếu truy cập Trong trường hợp, phương pháp thực tính tốn chuỗi cộng/nhân đơn giản vòng lặp Liệt kê Mã thử nghiệm hiệu truy cập trường public int accessSame(int loops) { m_value = 0; for (int index = 0; index < loops; index++) { m_value = (m_value + ADDITIVE_VALUE) * MULTIPLIER_VALUE; } return m_value; } public int accessReference(int loops) { TimingClass timing = new TimingClass(); for (int index = 0; index < loops; index++) { timing.m_value = (timing.m_value + ADDITIVE_VALUE) * MULTIPLIER_VALUE; } return timing.m_value; } public int accessReflection(int loops) throws Exception { TimingClass timing = new TimingClass(); try { Field field = TimingClass.class getDeclaredField("m_value"); for (int index = 0; index < loops; index++) { int value = (field.getInt(timing) + ADDITIVE_VALUE) * MULTIPLIER_VALUE; field.setInt(timing, value); } return timing.m_value; } catch (Exception ex) { System.out.println("Error using reflection"); throw ex; } } Chương trình thử nghiệm gọi phương thức lặp lại nhiều lần với số đếm vịng lặp lớn, lấy trung bình phép đo thời gian số gọi Thời gian cho gọi tới phương thức khơng bao gồm giá trị trung bình, thời gian khởi chạy tham số kết Trong hoạt động thử nghiệm cho viết này, sử dụng số đếm vòng lặp 10 triệu cho gọi, chạy hệ thống PIIIm 1GHz Các kết tạo thời gian với ba JVM Linux khác thể Hình Tất thử nghiệm sử dụng giá trị cài đặt mặc định cho JVM Hình Các thời gian truy cập trường Thang đo logarit biểu đồ hiển thị toàn dải thời gian, làm giảm tác động trực quan khác biệt Trong trường hợp hai tập hợp số liệu (các Sun JVM), thời gian thực sử dụng phản chiếu lớn 1000 lần so với sử dụng truy cập trực tiếp IBM JVM theo so sánh tốt chút, phương thức phản chiếu dài 700 lần so với phương thức khác Khơng có khác biệt đáng kể theo thời gian hai phương thức khác JVM nào, IBM JVM chạy nhanh gần gấp đôi so với Sun JVM Có khả năng, khác biệt phản chiếu tối ưu hóa chuyên dụng Sun Hot Spot JVM sử dụng, chúng có xu hướng thực không tốt theo tiêu chuẩn đơn giản Bên cạnh thử nghiệm thời gian truy cập trường, tơi thực loại thử nghiệm tính cho gọi phương thức Với gọi phương thức, thử ba thay đổi truy cập giống với việc truy cập trường, với biến thêm vào cho việc sử dụng phương thức không đối số so với cho qua trả giá trị theo gọi phương thức Liệt kê cho thấy mã với ba phương thức sử dụng để thử nghiệm dạng giá trị cho qua trả gọi Liệt kê Mã thử nghiệm hiệu truy cập phương thức public int callDirectArgs(int loops) { int value = 0; for (int index = 0; index < loops; index++) { value = step(value); } return value; } public int callReferenceArgs(int loops) { TimingClass timing = new TimingClass(); int value = 0; for (int index = 0; index < loops; index++) { value = timing.step(value); } return value; } public int callReflectArgs(int loops) throws Exception { TimingClass timing = new TimingClass(); try { Method method = TimingClass.class.getMethod ("step", new Class [] { int.class }); Object[] args = new Object[1]; Object value = new Integer(0); for (int index = 0; index < loops; index++) { args[0] = value; value = method.invoke(timing, args); } return ((Integer)value).intValue(); } catch (Exception ex) { System.out.println("Error using reflection"); throw ex; } } Hình cho thấy kết tính thời gian tơi cho gọi phương thức Ở lần nữa, phản chiếu chậm nhiều so với khả trực tiếp Các khác biệt không lớn với trường hợp truy cập trường, có phạm vi từ chậm vài trăm lần Sun 1.3.1 JVM đến 30 lần chậm IBM JVM cho trường hợp không đối số Hiệu thử nghiệm cho gọi phương thức phản chiếu với đối số chậm đáng kể so với gọi không đối số tất JVM Điều phần có lẽ trình bao java.lang.Integer cần thiết cho giá trị int chuyển qua trả Do Integer không thay đổi, cần tạo cho lần trả phương thức, bổ sung thêm chi phí hoạt động đáng kể Hình Các thời gian gọi phương thức Hiệu phản chiếu vùng trọng tâm cho Sun phát triển JVM 1.4, cho thấy kết gọi phương thức phản chiếu Sun JVM 1.4.1 cho thấy hiệu cải thiện đáng kể so với phiên 1.3.1 cho kiểu hoạt động này, chạy nhanh khoảng bảy lần lần thử nghiệm IBM 1.4.0 JVM lại đưa hiệu tốt cho lần thử nghiệm đơn giản này, vậy, chạy nhanh đến lần so với Sun 1.4.1 JVM Tôi viết chương trình thử nghiệm tính tương tự để tạo đối tượng sử dụng phản chiếu Tuy nhiên, khác với trường hợp gần không đáng kể với trường hợp gọi trường trường hợp gọi phương thức Việc xây dựng cá thể java.lang.Object đơn giản với gọi newInstance() tốn thời gian nhiều khoảng 12 lần so với việc sử dụng new Object() Sun 1.3.1 JVM, nhiều khoảng bốn lần IBM 1.4.0 JVM nhiều khoảng hai lần Sun 1.4.1 JVM Việc xây dựng mảng sử dụng Array.newInstance(type, size) phải tối đa khoảng hai lần dài sử dụng new type[size] với JVM thử nghiệm nào, với khác biệt giảm xuống kích thước mảng tăng lên Tóm tắt phản chiếu Sự phản chiếu ngơn ngữ Java đưa cách linh hoạt thành phần chương trình liên kết động Nó cho phép chương trình bạn tạo vận hành đối tượng lớp (dễ bị hạn chế an ninh) mà không cần phải mã cố định (hardcode) lớp đích trước thời hạn Các tính làm cho phản chiếu đặc biệt có ích để tạo thư viện làm việc với đối tượng theo cách chung chung Ví dụ phản chiếu thường sử dụng khung công tác tồn đối tượng cho sở liệu, XML, định dạng bên khác Sự phản chiếu có hai hạn chế Một vấn đề hiệu Sự phản chiếu chậm nhiều so với mã trực tiếp sử dụng để truy cập trường phương thức Các vấn đề mức độ phụ thuộc vào cách phản chiếu sử dụng chương trình Nếu sử dụng phần tương đối xảy hoạt động chương trình, hiệu chậm mối quan tâm Ngay số liệu thời gian trường hợp xấu thời gian thử nghiệm cho thấy hoạt động phản chiếu có vài micro giây Các vấn đề hiệu trở thành mối quan tâm thật sự phản chiếu sử dụng logic cốt lõi ứng dụng hiệu năng-tới hạn Một hạn chế đáng sợ cho nhiều ứng dụng việc sử dụng phản chiếu che khuất thực xảy bên mã bạn Các lập trình viên mong đợi nhìn thấy logic chương trình mã nguồn kỹ thuật phản chiếu mà bỏ qua mã nguồn tạo vấn đề bảo trì Mã phản chiếu phức tạp so với mã trực tiếp tương ứng, thấy ví dụ mã từ so sánh hiệu Các cách tốt để đối phó với vấn đề sử dụng phản chiếu nơi mà thực bổ sung thêm tính linh hoạt có ích dẫn chứng tài liệu sử dụng bên lớp đích Trong lần cài đặt tiếp theo, tơi cho ví dụ chi tiết việc sử dụng phản chiếu Ví dụ cung cấp API để xử lý tham số dòng lệnh ứng dụng Java, cơng cụ bạn thấy có ích cho ứng dụng riêng bạn Nó xây dựng mạnh phản chiếu tránh điểm yếu Sự phản chiếu có làm đơn giản hóa việc xử lý dịng lệnh bạn? Tìm thấy phần loạt Động lực học lập trình Java Mục lục  Lớp người bắt đầu  Sự phản chiếu lớp  An ninh phản chiếu  Hiệu phản chiếu  Tóm tắt phản chiếu ... tượng bên JVM Sự phản chiếu cho phép bạn truy cập thời gian chạy đến loạt thông tin lớp Thậm chí cịn cho phép bạn đọc viết trường phương thức gọi lớp chọn thời gian chạy Sự phản chiếu cơng cụ mạnh... lý dịng lệnh bạn? Tìm thấy phần loạt Động lực học lập trình Java Mục lục  Lớp người bắt đầu  Sự phản chiếu lớp  An ninh phản chiếu  Hiệu phản chiếu  Tóm tắt phản chiếu ... tượng chuyển qua để tìm thơng tin lớp, sau trực tiếp tìm trường có tên lớp Các phương thức phản chiếu Sự phản chiếu Class gọi truy cập thông tin phương thức giống với phản chiếu sử dụng cho hàm tạo

Ngày đăng: 07/08/2014, 10:22

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan