Tôi muốn gọi phương thức main
tĩnh. Tôi có đối tượng thuộc loại Class
, nhưng tôi không thể tạo một thể hiện của lớp đó và cũng không thể gọi phương thức static
main
.Gọi phương thức tĩnh sử dụng phản chiếu
Trả lời
// String.class here is the parameter type, that might not be the case with you
Method method = clazz.getMethod("methodName", String.class);
Object o = method.invoke(null, "whatever");
Trong trường hợp phương pháp này là sử dụng cá nhân getDeclaredMethod()
thay vì getMethod()
. Và gọi setAccessible(true)
trên đối tượng phương thức.
String methodName= "...";
String[] args = {};
Method[] methods = clazz.getMethods();
for (Method m : methods) {
if (methodName.equals(m.getName())) {
// for static methods we can use null as instance of class
m.invoke(null, new Object[] {args});
break;
}
}
Tại sao không sử dụng getMethod với tên chính xác thay vì lặp qua tất cả các phương thức? – mjaggard
Đôi khi nó dễ dàng hơn nhiều để lặp và tìm phương thức theo tên hơn để sử dụng getMethod vì getMethod (hoặc getDeclaredMethod) yêu cầu bạn làm việc ra các kiểu tham số một cách chi tiết. Nó chỉ phụ thuộc nếu vấn đề hiệu quả vi mô - Java lặp lại rất nhanh, trừ khi bạn đang gọi phương thức hàng triệu lần trong một số vòng lặp bên trong thì lặp lại sẽ đủ nhanh –
Ngoài ra trong một tình huống thực tế hơn, bạn sẽ chỉ tìm thấy phương pháp một lần ngay cả khi bạn sẽ sử dụng sự phản chiếu để gọi nó nhiều lần. Vì vậy, thêm chi phí khi tìm thấy nó là không quan trọng. – RenniePet
Từ Javadoc của Method.invoke():
Nếu phương thức cơ bản là tĩnh, thì đối số obj được chỉ định bị bỏ qua. Nó có thể là null.
gì xảy ra khi bạn
Class klass = ...; Method m = klass.getDeclaredMethod(methodName, paramtypes); m.invoke(null, args)
- 1. Android/Java: Gọi phương thức sử dụng phản chiếu?
- 2. Làm cách nào để gọi phương thức tĩnh riêng tư bằng cách sử dụng phản chiếu (Java)?
- 3. Sử dụng phản chiếu, gọi phương thức của một Trường trên đối tượng đã tồn tại
- 4. gọi phương thức tĩnh trong java
- 5. Sử dụng phản chiếu để gọi dịch vụ web ASP.NET
- 6. Gọi phương thức tĩnh động trong PHP?
- 7. biến tĩnh trong phương thức gọi
- 8. Gọi phương thức tĩnh trong C#
- 9. gọi phương thức không tĩnh theo tên
- 10. Gọi phương thức tĩnh chung trong PowerShell
- 11. Tiếp cận tĩnh biến thức sử dụng phản ánh
- 12. Làm thế nào để gọi một phương thức đối tượng Scala bằng cách sử dụng sự phản chiếu?
- 13. Tạo phương thức động để đặt trường của cấu trúc thay vì sử dụng phản chiếu
- 14. Làm thế nào để bạn chuyển các tham số bằng cách ref khi gọi một phương thức tĩnh bằng cách sử dụng sự phản chiếu?
- 15. Gọi phương thức với các tham số tùy chọn thông qua sự phản chiếu
- 16. Gọi phương thức với tham số tùy chọn thông qua phản chiếu
- 17. Tại sao scala sử dụng phản xạ để gọi phương thức trên kiểu cấu trúc?
- 18. Gọi phương thức tĩnh qua Method.invoke() đã cho tôi NPE
- 19. Java - Nhận tham chiếu đến một lớp tĩnh sử dụng sự phản chiếu
- 20. Truy cập mạng chia sẻ trong các cuộc gọi phương thức phản chiếu
- 21. Gọi phương thức tĩnh trên một lớp học?
- 22. Không thể tham chiếu tĩnh thành phương thức tĩnh (Android getApplicationContext())
- 23. rắc rối cách gọi phương pháp tĩnh nhờ sủ dụng phản xạ và C#
- 24. Lấy các giá trị trường tĩnh của một kiểu bằng cách sử dụng sự phản chiếu
- 25. Tại sao một đại biểu không thể tham chiếu đến một phương thức không tĩnh khi được sử dụng trong một phương thức tĩnh?
- 26. Tôi có thể sử dụng phương thức tĩnh làm gọi lại menu trong drupal không?
- 27. Gọi các phương thức tĩnh có chứa các tham số chung bằng cách sử dụng Reflection
- 28. Cách Groovy để tự động gọi một phương thức tĩnh
- 29. kết thúc cuộc gọi() từ phương thức tĩnh
- 30. Mã thử nghiệm đơn vị gọi các phương thức tĩnh
Hiện chúng tôi mã, xin vui lòng. –