2011-07-02 29 views
6

Tôi đã đọc một số bài viết về aspectj, tôi biết nó có thể nâng cao các lớp học, đó là hấp dẫn. Tôi có một câu hỏi rất ngu ngốc rằng tôi không thể tìm thấy câu trả lời rõ ràng:Có thể thêm các phương thức vào java.lang.String

Có thể thêm các phương thức vào java.lang.String không?

Hoặc câu hỏi tương tự: Nếu tôi không thể lấy nguồn của một số lớp, tôi có thể cải thiện chúng theo khía cạnh không?

Trả lời

6

Không, bạn không thể làm điều này với bạn tôi.

Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm Type not exposed to user

Để biết thêm chi tiết xin vui lòng hãy xem The AspectJ Development Environment Guide #Special Cases

Như nó nói

Các lớp sau không được tiếp xúc với các cơ sở hạ tầng LTW bất kể tệp aop.xml nào được sử dụng

  • Tất cả org.aspectj * lớp học (và các gói con) -. Như những người đang cần thiết cho cơ sở hạ tầng riêng của mình
  • Tất cả java * và javax * lớp học (và các gói con)
  • Tất cả sun.reflect * lớp -... Như đó là các lớp cụ thể JDK được sử dụng khi các cuộc gọi phản chiếu xảy ra
+0

Câu trả lời này chỉ áp dụng cho LTW. – selig

4

Tôi không phải là chuyên gia về aspectj, nhưng tôi tin rằng bạn có thể thực hiện cả hai việc này.

Để thêm phương thức vào lớp học hoặc thậm chí làm cho phương thức triển khai giao diện mới và cung cấp triển khai thông qua một khía cạnh, tôi nghĩ bạn muốn inter-type declarations.

AspectJ thực hiện công việc của mình bằng thao tác mã byte, vì vậy bạn không cần quyền truy cập vào nguồn của các lớp mà bạn đang thay đổi.

8

Tôi chỉ đang tìm kiếm một thứ khác và vấp phải câu hỏi này. Tôi muốn chỉ ra rằng câu trả lời của Kowser, mặc dù nó đã được chấp nhận, có phần không chính xác. Câu hỏi đề cập đến không có giới hạn đối với LTW, vì vậy CTW vẫn còn trong cuộc đua. Có thể dệt các tệp lớp JDK/JRE và sau đó thêm các lớp được khuyến cáo vào đường dẫn lớp khởi động trong bước sau. Tôi đã thực hiện nó trước đó (thậm chí chính xác những gì đã được hỏi, tức là tuyên bố một phương thức mới trong String), và nó hoạt động mà không có vấn đề gì.

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