2009-04-03 39 views

Trả lời

0

Bạn không thể xây dựng các lớp mới theo cách này.

Nếu bạn có tên của một lớp, bạn có thể sử dụng Class.forName (className) để tải/tham chiếu một lớp.

Nếu bạn có mã byte cho lớp bạn muốn tạo, bạn có thể có trình nạp lớp tải mã byte và cung cấp cho bạn lớp. Điều này có thể là nâng cao hơn bạn dự định.

+2

Anh ta hỏi về cách khởi tạo một thể hiện mới của lớp, không tạo đối tượng Class (cũng không phải cách lấy mã byte). Điều này không nên được đánh dấu là câu trả lời đúng. Tiếp tục đọc câu trả lời của andri dưới đây. –

+1

@RyanShillington Điều này trả lời câu hỏi gốc. Câu hỏi được chỉnh sửa thành một câu hỏi khác, đó là những gì 'andri' trả lời. –

+0

Ah, tôi hiểu rồi. Lỗi của tôi. –

40

Bạn có thể sử dụng Class.getConstructors (hoặc Class.getConstructor) để lấy danh sách các nhà xây dựng có sẵn và gọi bất kỳ người nào trong số họ với Constructor.newInstance, chấp nhận tham số.

5

Java tutorial on reflection bao gồm điều này. Nhưng vâng, về cơ bản Class.getConstructors, thì Constructor.newInstance là nơi nó ở.

1

Nếu bạn có danh sách các đối tượng thu được thông qua các lớp học, bạn cũng có thể tham khảo tĩnh các nhà xây dựng chứ không phải là trượt vào sự xấu xa phản chiếu.

+0

Có thể việc tạo bản đồ đang được thực hiện trong một chương trình dịch vụ sẽ được liên kết cùng với một số chương trình khác chưa được tạo. Họ sẽ gọi chương trình dịch vụ, mỗi chương trình có một danh sách khác nhau chứa các biến Class cho các lớp không tồn tại khi chương trình dịch vụ được viết. – RenniePet

2

Java được thiết kế để bạn không bao giờ có thể "lừa" nó miễn là bạn sử dụng java.lang/java. các lớp hoặc các thư viện chuẩn khác. Một trong những điều quan trọng nhất của OOP là các đối tượng phải ở trong trạng thái xác định, do đó bạn có thể an toàn khi hàm khởi tạo luôn chạy. Ngay cả khi bạn đang sử dụng một số thư viện phản chiếu kỳ lạ để hoàn thành công việc của mình.

Vì vậy, sử dụng Class.forName ("me.Test"). NewInstance(); (hoặc tương tự) sẽ dưới mui xe gọi hàm dựng Test() cho bạn.

Nếu bạn muốn gọi constructor khác mã là cái gì đó như:

Test test = (Test)Class.forName("Test").getConstructor(String.class).newInstance("Hello World"); 

Ở đây getConstructor hỏi những gì các nhà xây dựng trông giống như (nó muốn một chuỗi) và sau đó bạn gọi nó với một chuỗi.

9

Chỉ cần thêm một điểm tôi thấy thiếu:

Bạn có thể gọi newInstance trực tiếp trên đối tượng Class nếu nó có một constructor rỗng công cộng. (Null constructor là constructor không có đối số.)

Nếu không, bạn có thể tìm thấy các nhà thầu qua Class.getConstructors() như những người khác đã nói.

Các vấn đề liên quan