Tôi có một đối tượng Java với một số cấu trúc không xác định. Bây giờ tôi muốn xuất cấu trúc này (các thuộc tính và các giá trị của chúng) để đăng nhập tập tin. Và tất nhiên tôi muốn làm điều này trong chế độ đệ quy. Có thư viện nào có thể giúp tôi không?Làm thế nào để đăng nhập nội bộ của một đối tượng tùy ý trong Java?
Trả lời
XStream cực kỳ tốt khi in đồ thị đối tượng, thậm chí xử lý chu kỳ mà không cần thêm bất kỳ cấu hình hoặc mã bổ sung nào trong lớp học của bạn (tức là không gây rối với toString()). Chỉ cần thêm thư viện và bạn có thể làm điều này với bất kỳ thứ gì và có được kết quả tốt đẹp, hữu ích:
log.debug("The object: {}", new XStream().toXML(anyObject));
Điều đó sẽ cho bạn đầu ra XML. Nếu bạn thích JSON, bạn có thể nhận được nó với một chút công việc nhỏ hơn như được mô tả chi tiết trong các XStream JSON tutorial.
Tuần tự hóa Java, đi kèm với Java, nên thực hiện thủ thuật. Nó sẽ ở định dạng nhị phân.
Ngoài ra còn có XML serialization có thể được cung cấp bởi JAXB
Tôi đề nghị bạn nhìn hoặc ở Apache Commons BeanUtils hoặc Apache Commons Lang, cụ thể ReflectionToStringBuilder.
bạn có thể sử dụng phản ánh
getClass và sau đó đi qua mỗi biến dụ và tiếp tục (một số đối tượng có thể được xử lý đặc biệt (như Strings))
Bạn nên sử dụng phản ánh. Hãy xem java.lang.Class
lớp học, cụ thể là phương pháp .getFields()
.
Tôi đã tìm thấy Apache Commons ToStringBuilder.reflectionToString()
rất hữu ích. Để nhận được đệ quy, bạn có thể ghi đè lên từng phương thức toString() của đối tượng bằng một cuộc gọi đến hàm này qua this
.
http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/builder/ToStringBuilder.html
hãy cẩn thận các chu kỳ trong biểu đồ đối tượng ... –
Các java reflection API sẽ cung cấp cho bạn truy cập vào tất cả các công cụ này (thành viên tư nhân và tất cả). Để nhận được các thành viên riêng tư, bạn cần phải nhận yourObject.getClass().getDeclaredFields()
để truy cập một trường riêng tư, hãy nhớ gọi số yourField.setAccesible(true)
trên đó.
Tất nhiên, bạn sẽ nhanh chóng gặp phải vấn đề bằng cách kiểm tra lớp học của riêng mình để thực hiện điều này thông qua phản ánh. Các vấn đề chính xuất hiện khi cố gắng quyết định cuối cùng in một giá trị và xác định nếu nó là một enum, một nguyên thủy, một mảng nguyên thủy và vân vân. Bạn có thể sử dụng phương thức Class.isPrimitive để giúp tìm ra bước đó. Để truy cập các phần tử của một mảng, hãy sử dụng lớp java.lang.reflect.Array.
Tùy chọn tốt nhất, được đăng trước đó, là sử dụng số ReflectionToStringBuilder của dấu phẩy apache.
Trình nối tiếp json sẽ thực hiện công việc, ví dụ: sử dụng Gson:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gson.Gson;
...
private static final Logger LOG = LoggerFactory.getLogger(Your.class);
...
Object obj = ...;
LOG.info(new Gson().toJson(obj));
- 1. Làm thế nào để bạn đăng nhập nội dung của một đối tượng JSON trong Node.js?
- 2. cách đăng đối tượng json tùy ý vào webapi
- 3. Làm thế nào để xóa các đối tượng tùy ý trong trường lặp lại? (protobuf)
- 4. Sản phẩm Descartes của các bộ tùy ý trong Java
- 5. Làm thế nào để chạy phương thức đối tượng tùy ý từ chuỗi trong ruby?
- 6. Java: Làm thế nào để chuyển đổi một đối tượng File thành một đối tượng String trong java?
- 7. Làm thế nào để đăng nhập ngoại lệ trong JavaScript
- 8. Dumping nội dung bộ nhớ của một đối tượng
- 9. Làm thế nào để biến một đối tượng giống như Iterator java thành một chuỗi clojure
- 10. Làm thế nào để tiêu diệt các đối tượng java?
- 11. Làm thế nào để tiếp tục đăng nhập trên cùng một dòng trong Java?
- 12. Làm thế nào để nhập một đối số vào CGContextSetRGBFillColor?
- 13. Làm thế nào để làm cho đối tượng chung trong java thực hiện một giao diện
- 14. Làm thế nào để biết khi nào bộ nhớ của một đối tượng Java được phát hành?
- 15. Làm thế nào để có được các cửa sổ đăng nhập thông tin đăng nhập từ một ứng dụng Swing?
- 16. Làm thế nào để chạy sql tùy ý với mybatis?
- 17. Làm thế nào để Digitally "Đăng nhập" một tài liệu
- 18. OpenID là tùy chọn Đăng nhập một lần?
- 19. làm thế nào để khớp mẫu trên một số đối số tùy ý?
- 20. Làm thế nào để đăng nhập một cái gì đó trong Rails trong một tập tin đăng nhập độc lập?
- 21. Làm thế nào để xóa một đối tượng của phiên quản lý phạm vi đậu?
- 22. Làm cách nào để truyền một đối tượng tùy ý để báo cáo jasper làm tham số?
- 23. Làm thế nào để loại bỏ một đối tượng khỏi một ArrayList trong Java?
- 24. Làm thế nào để lực lượng gợi ý nolock cho đăng nhập máy chủ sql
- 25. Mocking đối tượng instantiated nội bộ
- 26. Làm cách nào để đăng nhập một applet Java để sử dụng trong trình duyệt?
- 27. Làm thế nào để trang trí một đối tượng trong Java
- 28. Nhập một lớp tùy chỉnh trong Java
- 29. Làm thế nào để Serialize/Unserialize một đối tượng SimpleXML?
- 30. Làm thế nào để thay đổi lớp của một đối tượng động trong C#?
Bạn có nghĩ định dạng nhị phân phù hợp với tệp nhật ký không? :) – yegor256
Điểm tốt. Tôi vừa thêm liên kết vào JAXB. –