2012-02-07 10 views
5

Để hiểu nội bộ của một số mã hoặc lỗi in trên các lỗi, tôi sử dụng pp các chức năng giống như trong Python và Emacs lisp.Tìm thư viện chuẩn hoặc kỹ thuật để có được đại diện được in khá rõ ràng của OBJECT cho Java

Bây giờ tôi đến với Java và tìm thư viện chuẩn hoặc tecnique để có được đại diện khá in của OBJECT cho Java.

Dường như đặc tả Java hiện tại cho phép quan sát đối tượng Java trong thời gian chạy. Nhưng nội tâm có thể không quá mạnh mẽ. m (Đối tượng o) không thể gọi với đối tượng mới [] arg?

LƯU Ý Tôi là NOT tìm đến mã nguồn làm đẹp! Tôi đang tìm kiếm thời gian chạy khá in Java đối tượng bán phá giá.

NOTE2 Những câu hỏi tương tự nhưng không chính xác như nhau:

+1

Đó là cách tiếp cận điển hình cho các ngôn ngữ như lisp và python. Người ta thấy nó ít hơn cho một ngôn ngữ biên dịch như java. Ở đó, nó thiết lập một điểm ngắt và kiểm tra các biến trong trình gỡ rối. Đó không phải là thông minh, nhưng bạn có thể xem xét thay đổi cách làm việc của bạn. Việc thực hiện 'toString' cũng rất hữu ích. –

+0

@JoopEggen Cảm ơn bạn đã biết mẹo về trình gỡ lỗi! Tôi có cần sử dụng một số trình gỡ rối GUI hay jdb có thể in nội dung lớp một cách độc đáo (mảng của số nguyên) không? Tôi sử dụng Emacs vì vậy nó rất dễ dàng lưu trữ và xử lý đầu ra jdb cho tôi ... – gavenkoa

+0

Để in lớp contend dưới ** jdb ** debugger sử dụng ** dump ** lệnh! – gavenkoa

Trả lời

11

Bạn có thể sử dụng ReflectionToStringBuilder từ thư viện Apache Commons Lang.

mẫu:

String dump = ReflectionToStringBuilder.toString(object); 

Đối với câu hỏi của bạn:

m (Object o) không thể được gọi với đối tượng mới [] arg?

Chắc chắn có thể, mảng Object là loại phụ của Object.

7

Đối với một giải pháp nhanh chóng và dơ bẩn để hiển thị các sản phẩm của một đối tượng Java , bạn có thể sử dụng Jackson http://jackson.codehaus.org/ điều này sẽ xuất ra đối tượng trong JSON.

+1

Đối với bất kỳ ai cần thêm chi tiết, điều này có thể được thực hiện bằng [ObjectMapper] (https://fasterxml.github.io/jackson-databind/javadoc/2.5/com/fasterxml/jackson/databind/ObjectMapper.html): '(new com .fasterxml.jackson.databind.ObjectMapper()) writerWithDefaultPrettyPrinter(). writeValueAsString (đối tượng); ' –