2010-05-26 39 views
6

All,Trọng một phương pháp trong các đối tượng tĩnh tạo

Do một lỗi trong một thư viện Tôi đang sử dụng, tôi cần phải ghi đè lên các phương pháp xử lý() trên tất cả các đối tượng mở rộng một lớp nào đó và làm cho nó một không- OP. Tôi biết rằng nếu tôi làm cho trường hợp mới của các lớp học trực tiếp, điều này rất dễ dàng để làm:

layerManager = new LayerManagerLayer(wwd) { 
    @Override 
    public void dispose() {} 
}; 

Vấn đề là rất nhiều các trường hợp đối tượng tôi nhận được không được xây dựng trực tiếp bằng mã khách hàng của tôi, nhưng thay vào đó được tạo thông qua các cuộc gọi phương thức thư viện tĩnh.

// Here I want to override the dispose method, but I cannot. 
Layer l = ShapefileLoader.makeShapefileLayer(this.getClass().getResource("polylines10.shp")); 

Có cách nào tôi có thể tiêm phương pháp xử lý của tôi vào mà đối tượng tĩnh tạo ra mà không sửa đổi các mã nguồn gốc?

+0

* "Có cách nào tôi có thể [...] mà không sửa đổi mã nguồn gốc không?" * - Bài họC# 1 - tránh sử dụng thư viện mà bạn không ít nhất có tùy chọn sửa đổi mã nguồn để sửa chương trình lỗi cửa hàng. –

Trả lời

5

Nếu khách hàng biên dịch mã của riêng mình, Bạn có thể sử dụng AspectJ để tiêm Phương thức vứt bỏ (xung quanh) của bạn. Các tùy chọn khác là một số công cụ sửa đổi bytecode như cglib. Nhìn vào danh sách này: http://java-source.net/open-source/bytecode-libraries

1

Bạn có thể sử dụng thư viện thao tác mã byte như Javassist. Bạn cần lấy về cơ bản mã byte của lớp LayerManagerLayer của bạn và tiêm phương thức vứt bỏ nó vào nó.

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