Tôi có một lớp và tôi muốn tìm tất cả các biến công khai của nó (không phải các hàm). làm thế nào tôi có thể làm như vậy? cảm ơn!java: lấy tất cả các tên biến trong một lớp
Trả lời
Field[] fields = YourClassName.class.getFields();
trả về một mảng của tất cả các biến công khai của lớp.
getFields()
trả lại các trường trong toàn bộ lớp thừa kế. Nếu bạn muốn có các lĩnh vực chỉ được định nghĩa trong lớp trong câu hỏi, và không superclasses của nó, sử dụng getDeclaredFields()
, và lọc public
người thân với Modifier
phương pháp sau đây:
Modifier.isPublic(field.getModifiers());
Các YourClassName.class
đen thực sự đại diện cho một đối tượng kiểu java.lang.Class
. Kiểm tra tài liệu của nó để biết thêm các phương pháp phản chiếu thú vị.
Lớp học Field
ở trên là java.lang.reflect.Field
. Bạn có thể xem toàn bộ gói java.lang.reflect
.
chỉ là một lưu ý - ban đầu câu trả lời của tôi có chứa một tuyên bố sai, nhưng nó đã được upvoted một số lần. Vui lòng đọc kỹ hơn;) – Bozho
@downvoter - sai lầm là trước đây. Nếu bạn thấy ngay bây giờ, hãy chia sẻ. – Bozho
là giải pháp này có chậm không? hoặc chúng ta có thể sử dụng nó một cách tự do? –
https://docs.oracle.com/javase/tutorial/reflect/class/classMembers.html. Cũng có các biểu đồ để định vị các phương thức và các hàm tạo.
Như đã đề cập một số người dùng, bên dưới mã có thể giúp tìm ra tất cả các trường trong một lớp nhất định.
TestClass testObject= new TestClass().getClass();
Method[] methods = testObject.getMethods();
for (Method method:methods)
{
String name=method.getName();
if(name.startsWith("get"))
{
System.out.println(name.substring(3));
}else if(name.startsWith("is"))
{
System.out.println(name.substring(2));
}
}
Tuy nhiên một cách tiếp cận thú vị hơn là dưới đây:
Với sự giúp đỡ của thư viện Jackson, tôi đã có thể tìm thấy tất cả các thuộc tính của lớp kiểu String/integer/đôi, và các giá trị tương ứng trong một lớp bản đồ. (mà không sử dụng phản xạ api!)
TestClass testObject = new TestClass();
com.fasterxml.jackson.databind.ObjectMapper m = new com.fasterxml.jackson.databind.ObjectMapper();
Map<String,Object> props = m.convertValue(testObject, Map.class);
for(Map.Entry<String, Object> entry : props.entrySet()){
if(entry.getValue() instanceof String || entry.getValue() instanceof Integer || entry.getValue() instanceof Double){
System.out.println(entry.getKey() + "-->" + entry.getValue());
}
}
Bạn có thể sử dụng bất kỳ của hai dựa trên nhu cầu của bạn:
Field[] fields = ClassName.class.getFields(); // returns inherited members but not private members.
Field[] fields = ClassName.class.getDeclaredFields(); // returns all members including private members but not inherited members.
Để lọc chỉ các lĩnh vực công cộng từ danh sách trên (dựa trên yêu cầu) sử dụng mã bên dưới:
List<Field> fieldList = Arrays.asList(fields).stream().filter(field -> Modifier.isPublic(field.getModifiers())).collect(
Collectors.toList());
- 1. Lấy tên của tất cả các lớp Java được khai báo trong một gói
- 2. In tất cả các biến trong một lớp học? - Python
- 3. android dexclassloader lấy danh sách tất cả các lớp
- 4. Lấy ra tất cả các lớp của một không gian tên cụ thể
- 5. cách lấy tất cả các lớp con của một lớp trong php
- 6. Lấy danh sách tất cả các trình nạp lớp trong một JVM
- 7. Xem tất cả các lớp học siêu trong Java
- 8. Lấy tất cả các giá trị từ các khóa HashMap trong một ArrayList Java
- 9. Lấy tất cả các yếu tố theo tên lớp bằng cách sử dụng DOMDocument
- 10. PHP: Cách lấy tất cả tên biến trong phương thức bài đăng php
- 11. Bắt tên của tất cả các datamembers trong một DataContract
- 12. Ẩn tất cả các thành phần có cùng tên lớp?
- 13. CMake: Cách lấy tên của tất cả các thư mục con của một thư mục?
- 14. Bắt tất cả các trường của một lớp
- 15. Cách tốt nhất để biết tất cả các biến trong một lớp là null?
- 16. lặp qua tất cả các biến thành viên của một lớp trong python
- 17. Lấy tên của một lớp học coffeescript?
- 18. In tất cả các tên phương thức của một lớp trong Ruby?
- 19. cho phép tất cả các tên miền
- 20. Các lớp Java bất biến?
- 21. Eclipse: liệt kê các phương thức và biến của tất cả các lớp
- 22. VisualVM - Tìm tất cả các tham chiếu đến một lớp
- 23. Java: vòng lặp trên tất cả các lớp trong đường dẫn lớp
- 24. Làm thế nào để có được tất cả các tên lớp trong một không gian tên trong Ruby?
- 25. Lấy danh sách tất cả các chủ đề hiện đang chạy trong Java
- 26. Lấy tất cả Cookie trong Python
- 27. AppleScript: Lấy danh sách tất cả các thuộc tính của một đối tượng hoặc lớp
- 28. Đổi tên nhiều biến trong nhiều lớp Java cùng một lúc
- 29. Javascript - bán phá giá tất cả các biến toàn cầu
- 30. Thêm lớp chú thích trong Hibernate bằng cách thêm tất cả các lớp trong một số gói. JAVA
Bạn có thể thực hiện việc này bằng cách sử dụng [Reflection API] (http://java.sun.com/docs/books/tutorial/reflect/). – Crozin