Một giải pháp sẽ được để có một Throwable cache định được thông qua trong
class StackPoint {
Throwable stack;
public Throwable getStack() {
if (stack == null)
stack = new Throwable();
return stack;
}
}
public void methodToCall(StackPoint sp) {
Throwable t = sp.getStack();
}
static final StackPoint one = new StackPoint();
methodToCall(one); // Have to remember to give each line a different StackPoint.
Lưu ý:. Nếu phương pháp trong đó kêu gọi người gọi này thay đổi, bạn chỉ ghi lại là người đầu tiên bao giờ hết.
Không có mẫu chuẩn và có khả năng là nếu bạn muốn điều này hiệu quả, người gọi sẽ cần phải chuyển một id duy nhất. Điều gần nhất bạn có thể làm là sử dụng lambda.
public void methodToCall(Runnable run) {
Class id = run.getClass();
}
Bạn có thể gọi nó như thế này
methodtoCall(()->{});
Điều này sẽ tạo ra một lớp khác nhau cho mỗi nơi nó được gọi, thậm chí nếu nó xuất hiện nhiều lần trên cùng một dòng. Nó tạo ra không có rác vì nó tái sử dụng cùng một đối tượng mỗi lần. Bạn có thể làm ngắn này với
void methodToCall(IntFunction fun) {
}
và gọi
methodToCall(a->1);
Nguồn
2016-09-29 09:14:27
Bản sao có thể có của http://stackoverflow.com/questions/26425049/how-to-get-a-unique-method-identifier –
Chỉ cần tự hỏi: bạn có ý định giải quyết vấn đề gì ở đây? – GhostCat
Có thể xem AspectJ và thiết lập điểm tham gia bất cứ khi nào API của bạn được gọi? –