Xin lỗi, không, không có cách lập trình đơn giản để xác định biến hoặc cuộc gọi phương thức nào là nguồn gốc của ngoại lệ. Bạn có thể sử dụng một cái gì đó như Aspect-Oriented Programming (AOP), ví dụ: AspectJ, nhưng điều này không phải là vốn có của ngôn ngữ và thường không được kết hợp vào một chương trình chỉ đơn giản là cho các mục đích gỡ lỗi.
if (var==null) -> too much work
try { } catch() { }
Debugger
Tôi biết bạn không muốn nghe điều này, nhưng đây là những cách đơn giản các chi phí kinh doanh.
if (this.superSL.items.get(name).getSource().compareTo(VIsualShoppingList.Source_EXTRA)==0) {
Thật không bình thường khi thấy có quá nhiều cuộc gọi cùng nhau. Tôi tin rằng bạn đặt cược tốt nhất là để có được trong thói quen phá vỡ này lên nhiều hơn - không cần thiết xuống đến 1 cuộc gọi trên mỗi dòng, nhưng ít hơn này. Tại sao?
1) Correctness
- có hợp lệ trong thiết kế cho một trong các cuộc gọi này để trả về giá trị không?Nếu vậy, bạn nên phá vỡ nó ra, kiểm tra nó, và xử lý nó một cách thích hợp.
2) Understandability
- sẽ dễ dàng hơn cho những người bảo trì trong tương lai (bao gồm tương lai bạn) để hiểu các biến trung gian, được đặt tên để giúp làm rõ những gì đang xảy ra trên dòng này.
3) Efficiency
- thường khi bạn đi sâu vào biểu đồ (chuỗi cùng một chuỗi các cuộc gọi phương thức), có khả năng bạn sẽ cần phải quay lại sau đó. Việc giữ giá trị trung gian này trong một biến trung gian có nghĩa là tránh thực hiện một hoặc nhiều cuộc gọi phương thức một lần nữa.
4) Debugging
- như được chỉ ra bởi câu hỏi của bạn, tách một dòng phức tạp như thế này sẽ đơn giản hóa việc gỡ lỗi. bằng cách thu hẹp nguồn có thể có của ngoại lệ.
Nguồn
2010-04-19 14:31:32
Hm, nó sẽ dễ dàng hơn để tìm NullPointerException nếu điều này wasn 't một lớp lót. Thật khó để làm theo mã như vậy. –
Xem xét các tùy chọn của bạn, tôi chỉ cho rằng "quá nhiều công việc" có thể thực sự có nghĩa là ít công việc hơn trong thời gian dài. –
Biến điều này thành một khối thích hợp. Bạn sẽ tìm thấy vấn đề trong thời gian không. – Geo