2010-07-28 52 views
12

Tôi muốn biết liệu có thể truy cập ngăn xếp cuộc gọi từ bên trong một phương thức để xem phương thức nào trong đó gói được gọi là phương thức hiện tại của chúng tôi không?Truy cập ngăn xếp cuộc gọi Java

Hoặc có thể có cách khác để thực hiện việc này?

Cảm ơn,

ExtremeCoder

T.B. Đây là tất cả trong Java

Trả lời

18

Có một cách:

Thread.currentThread().getStackTrace() 

Nhưng có không phải là một lý do để làm điều này khác hơn là cho mục đích debug.

+1

+1: Chắc chắn không nên thay đổi hành vi dựa trên người gọi, nhưng điều trên là chính xác cách thực hiện nhận thông tin. Ngoài ra, nếu bạn đang mắc kẹt với 1,4 thì bạn phải futz xung quanh với ngoại lệ để có được thông tin; nó có giá trị nâng cấp lên Java5 thay vì làm những loại hack IMO đó. –

+0

Ồ, trường hợp khác để làm những việc với việc đọc chồng là nếu bạn đang thực hiện các ngữ cảnh bảo mật, nhưng tốt hơn hết là nên sử dụng các công cụ chính sách bảo mật mà bạn đã có để thay thế. –

+0

Câu trả lời là đúng, nhưng tôi không đồng ý về việc sử dụng điều này chỉ để gỡ lỗi. Trong ứng dụng của tôi, tôi đã viết một trình bao bọc cho Log4j gửi các thông điệp ghi nhật ký tới trình phụ thêm theo tên người gọi. Vì vậy, bạn có thể thêm một thông điệp tường trình chỉ với một dòng, mà không cần gọi một cách rõ ràng đến 'Logger.getLogger()' trong mã. Bạn có thể gọi tiện ích ghi nhật ký là một mục đích gỡ lỗi, nhưng dù sao đi nữa. – jutky

Các vấn đề liên quan