Tôi muốn khám phá tại thời gian chạy CHỈ các phương pháp tĩnh của một lớp, làm thế nào tôi có thể làm điều này? Hoặc, cách phân biệt giữa các phương pháp tĩnh và không tĩnh.Làm cách nào để kiểm tra xem phương pháp có tĩnh hay không bằng cách sử dụng phản chiếu?
Trả lời
Sử dụng Modifier.isStatic(method.getModifiers())
.
/**
* Returns the public static methods of a class or interface,
* including those declared in super classes and interfaces.
*/
public static List<Method> getStaticMethods(Class<?> clazz) {
List<Method> methods = new ArrayList<Method>();
for (Method method : clazz.getMethods()) {
if (Modifier.isStatic(method.getModifiers())) {
methods.add(method);
}
}
return Collections.unmodifiableList(methods);
}
Lưu ý: Phương pháp này thực sự nguy hiểm từ quan điểm bảo mật. Class.getMethods "bypass [es] SecurityManager kiểm tra tùy thuộc vào trình nạp lớp của người gọi ngay lập tức" (xem phần 6 của hướng dẫn mã hóa an toàn Java).
Tuyên bố từ chối trách nhiệm: Chưa được kiểm tra hoặc thậm chí là trình biên dịch.
Lưu ý Modifier
nên được sử dụng cẩn thận. Cờ được biểu diễn dưới dạng int không an toàn. Một sai lầm phổ biến là kiểm tra cờ sửa đổi trên một loại đối tượng phản chiếu mà nó không áp dụng. Có thể trường hợp cờ ở cùng vị trí được đặt để biểu thị một số thông tin khác.
Để xác thịt ra (đúng) câu trả lời trước, đây là một đoạn mã đầy đủ mà làm những gì bạn muốn (ngoại lệ bỏ qua):
public Method[] getStatics(Class<?> c) {
Method[] all = c.getDeclaredMethods()
List<Method> back = new ArrayList<Method>();
for (Method m : all) {
if (Modifier.isStatic(m.getModifiers())) {
back.add(m);
}
}
return back.toArray(new Method[back.size()]);
}
Bạn có thể nhận các phương pháp tĩnh như thế này:
for (Method m : MyClass.class.getMethods()) {
if (Modifier.isStatic(m.getModifiers()))
System.out.println("Static Method: " + m.getName());
}
- 1. Java: Cách kiểm tra xem một phương pháp có bị ghi đè hay không, sử dụng phản chiếu
- 2. Làm cách nào để kiểm tra xem một phương thức có tĩnh trong PHP không?
- 3. Làm cách nào để kiểm tra xem một lớp groovy có thuộc tính tĩnh hay không?
- 4. Kiểm tra xem chuỗi có bắt đầu bằng http hay không bằng cách sử dụng Javascript
- 5. kiểm tra xem hộp kiểm có được chọn hay không bằng cách sử dụng jquery
- 6. Làm cách nào để kiểm tra xem một ALAset có tồn tại hay không bằng cách sử dụng URL
- 7. 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)?
- 8. Python: kiểm tra xem phương pháp là tĩnh
- 9. Làm cách nào để xác định xem một lớp Java có trừu tượng hay không bằng cách phản chiếu
- 10. Cách kiểm tra xem người dùng có đăng nhập hay không (cách sử dụng đúng user.is_authenticated)?
- 11. Python3: kiểm tra xem phương pháp là tĩnh
- 12. Làm thế nào để kiểm tra các phương pháp vô hiệu bằng cách sử dụng EasyMock
- 13. Có cách nào để kiểm tra xem hai phần tử DOM có bằng nhau hay không?
- 14. Làm thế nào để bạn kiểm tra xem một phương pháp python có bị ràng buộc hay không?
- 15. Phương pháp ghi đè trong DLL bằng cách sử dụng sự phản chiếu
- 16. Làm cách nào để kiểm tra xem tài nguyên được nhúng có tồn tại hay không?
- 17. Kiểm tra xem một số có dương hay âm bằng cách sử dụng toán tử bitwise
- 18. Làm cách nào để kiểm tra xem phiên có tồn tại hay không?
- 19. Làm cách nào để kiểm tra xem chuỗi có tồn tại hay không trong Oracle 11g?
- 20. Sử dụng phương pháp tĩnh hoặc không có phương pháp tĩnh nào trong lớp học nghề?
- 21. Làm cách nào để so sánh các lớp học bằng cách sử dụng sự phản chiếu?
- 22. cách kiểm tra xem div có id hay không?
- 23. Làm cách nào để kiểm tra xem điện thoại Android có đang sạc hay không
- 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. Làm cách nào để kiểm tra xem một trường có tồn tại hay không trong MongoDB?
- 26. Làm cách nào để kiểm tra xem quy trình có phản hồi không?
- 27. sử dụng jquery, làm cách nào để kiểm tra xem một phần tử có hiển thị hay không?
- 28. Làm cách nào để kiểm tra xem Textarea có trống trong Javascript hay Jquery không?
- 29. Làm cách nào để kiểm tra xem hàng có tồn tại hay không?
- 30. Kiểm tra xem lớp có phương thức tĩnh
Chỉnh sửa câu trả lời: là Công cụ sửa đổi thay vì ModifierS -> Sử dụng Modifier.isStatic (phương thức.getModifiers()) Thx for the Answer! – Telcontar
Yup, cảm ơn. Mặc dù tôi tuyên bố tên là một misdesign. Công cụ sửa đổi không đại diện cho công cụ sửa đổi. Nhưng sau đó cả lớp là một thiết kế sai. Và có lẽ cũng phản ánh. –
btw tương tự cũng hoạt động cho Trường, cũng cung cấp phương thức getModifiers() – Gregor