Tôi muốn chuyển loại lớp như tham số cho một phương thức trong java.all trong đó có cùng tham số hàm tạo và tạo một thể hiện của Lớp đó trong phương thức đó.is điều này có thể?chuyển loại lớp làm tham số và tạo thể hiện của nó
12
A
Trả lời
14
Sử dụng phản ánh để tạo ra các ví dụ:
Object obj = clazz.newInstance();
này sẽ sử dụng mặc định no-arg hàm tạo để tạo cá thể.
Constructor<?> constructor = clazz.getConstructor(String.class);
Object object = constructor.newInstance(new Object[] { strArgument });
Để tạo cá thể nếu bạn có một số hàm tạo khác nhận đối số.
3
Bạn cần sử dụng sự phản chiếu để làm điều đó, nhưng vâng, điều đó chắc chắn là có thể.
void MyMethod(Class className)
{
try {
Object obj = className.newInstance();
//obj is a newly created object of the passed in type
}
catch (Exception ex) { }
}
2
Bạn đang tìm kiếm Phản hồi.
phương pháp của bạn sẽ giống như thế này:
public void m1(Class c) {
try {
Object obj = c.newInstance();
//do something with your new instance
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
}
}
Các Oracle doc cho API Reflection là here
1
Có bạn có thể
void x(Class cls) throws InstantiationException, IllegalAccessException {
cls.newInstance();
}
Lưu ý rằng Class.newInstance có thể thất bại với
IllegalAccessException - nếu lớp hoặc constructor nullary của nó là không thể truy cập.
InstantiationException - nếu Lớp này đại diện cho lớp trừu tượng, giao diện, lớp mảng, kiểu nguyên thủy hoặc khoảng trống; hoặc nếu lớp không có hàm tạo null; hoặc nếu instantiation không vì một lý do nào khác.
xem API để biết thêm
Các vấn đề liên quan
- 1. Activator.CreateInstance - Cách tạo ra các thể hiện của các lớp có các hàm tạo tham số
- 2. Chuyển tên lớp làm tham số
- 3. Làm cách nào để tôi có thể tham khảo loại của lớp hiện tại?
- 4. Chuyển một lớp làm tham số?
- 5. Có thể tạo kiểu một thể hiện của một lớp nếu các tham số kiểu của nó không đúng thứ tự không?
- 6. Làm thế nào để có được loại chung loại khi không có tham số của nó?
- 7. Làm thế nào để tạo một thể hiện của lớp bên trong của lớp chính nó hoạt động?
- 8. Tạo một thể hiện của một lớp trong hàm tạo tĩnh của nó - tại sao nó được cho phép?
- 9. Lấy loại tham số lớp parametrized?
- 10. Khai báo các thể hiện của các từ đồng nghĩa loại tham số
- 11. Việc tạo một thể hiện của một lớp con có tự động tạo đối tượng siêu lớp của nó không?
- 12. nhiều tham số loại trong các loại lớp haskell
- 13. Tạo thể hiện loại chung?
- 14. Tạo một thể hiện của bí danh loại gây ra lỗi "loại lớp bắt buộc"
- 15. Đưa ra Loại C#, Nhận các Lớp cơ sở của nó và Giao diện Thực hiện
- 16. Làm thế nào tôi có thể chuyển thuộc tính của một lớp như một tham số của một phương thức?
- 17. Tham chiếu lớp cơ sở - gán loại khác cho nó
- 18. Lớp python có thể trả về một thể hiện mới của lớp của nó không?
- 19. MVVM: cách chuyển tham số cho hàm tạo của ViewModel
- 20. Làm thế nào để nhanh chóng một thể hiện của loại đại diện bởi tham số gõ vào Scala
- 21. Lớp Singleton với tham số
- 22. Cách khởi tạo mảng trong java khi hàm tạo của lớp có các tham số?
- 23. java, mở rộng lớp với hàm tạo của lớp chính có tham số
- 24. Tham số kiểu Scala có thể tham chiếu chính nó khi được sử dụng làm tham số cho một lớp cơ sở không?
- 25. Loại lớp C++ làm đối số
- 26. Truyền Lớp như tham số
- 27. Làm cách nào để tạo và truy cập một cá thể mới của một Lớp ẩn danh được chuyển như một tham số trong C#?
- 28. Không thể sử dụng các loại tĩnh làm tham số
- 29. Tôi có thể chuyển các tham số hàm tạo cho phương thức Resolve() của Unity không?
- 30. Chuyển một hàm (có tham số) làm tham số?
Bạn có chắc chắn thực sự muốn "làm" không? Tôi sẽ không "muốn" để làm điều đó - bao giờ hết. – Dariusz
Trường hợp sử dụng của bạn hấp dẫn điều này là gì? – Santosh
Có các trường hợp sử dụng hợp lệ như các lớp instantiating từ một nhà máy/constructor dựa trên tiêm. Trừ khi bạn đang viết một khuôn khổ như vậy, bạn cũng có thể sử dụng một DI để khởi tạo lớp với việc xây dựng tiêm. –