Tôi gặp sự cố tương thích API sau và tìm cách giải quyết vấn đề.Có cách nào để "bí danh" một lớp trong Java cho một lớp khác không?
TL; DR Có cách nào để tạo "bí danh" cho một lớp trong Java không? I E. một số mẹo để làm cho com.acme.foo.SomeEnum
trở thành bí danh cho com.acme.bar.SomeEnum
?
Câu chuyện dài. (Tôi đang cân nhắc nó một chút để tránh chỉ định ngón tay.)
Tôi đang làm việc với một công cụ Java mạnh mẽ cũng hỗ trợ các plugin. Không có xác định chính xác công khai API (theo ý bạn về những gì bạn có thể và không thể chạm), chỉ các lớp học, phương pháp và bảo mật riêng tư/được bảo vệ/gói/công khai thông thường. Có các điểm mở rộng được xác định (như, mở rộng lớp com.acme.plugin.Plugin
), nhưng sau đó bạn sẽ có quyền truy cập vào một khu vực rộng lớn của nội bộ của công cụ.
Trong phiên bản cập nhật nhỏ gần đây (như, 1.2.3
->1.2.4
) phát triển công cụ đã chuyển một lớp enum để gói khác - com.acme.foo.SomeEnum
trở thành com.acme.bar.SomeEnum
. Tôi nghĩ rằng nó được cho là một sự tái cấu trúc tầm thường, không phải là tái cơ cấu serios.
Lớp này, tuy nhiên, dường như đã được một số plugin sử dụng. Kết quả là các plugin này hiện không tương thích với phiên bản mới nhất. Hầu hết các plugin khá hữu ích, nhưng không chủ động được duy trì. Mọi người đã viết chúng cách đây nhiều năm - và họ chỉ làm việc qua nhiều năm, với hàng chục bản cập nhật phiên bản. Vì vậy, điều này có tiềm năng tiêu cực liên quan đến hệ sinh thái plugin của công cụ.
Câu hỏi của tôi là, nếu có một số cách trong Java để tạo ra một "bí danh" com.acme.foo.SomeEnum
cho com.acme.bar.SomeEnum
? Điều này sẽ cho phép các plugin cũ tiếp tục hoạt động với phiên bản mới của công cụ.
Một số mẹo của trình nạp lớp? Trong JavaScript mà sẽ là tầm thường để shim, nhưng trong Java?
Tại sao I đang yêu cầu điều này. Tôi là tác giả của plugin Maven kết thúc tốt đẹp công cụ được đề cập. Vì vậy, tôi có thể dễ dàng thêm đường vào cà phê này, như bộ nạp lớp và vân vân. Nếu có một cách kỹ thuật để thực hiện công việc này, tôi sẽ ở vị trí để tiết kiệm hầu hết các hệ sinh thái plugin của công cụ - ít nhất là cho người dùng Maven.
Tôi đã liên hệ với nhà cung cấp công cụ về điều này, nhưng không chắc chắn về sự thành công.
Chỉ cần làm rõ - I am không nhà cung cấp Công cụ được đề cập. Tôi (a) viết các plugin cho The Tools (và không gặp rắc rối lớn khi cập nhật plugins của tôi) và (b) là tác giả của số the-tool-maven-plugin
cho phép thực thi Công cụ trong Maven được tạo. Tôi cũng tham khảo ý kiến rất nhiều về Công cụ và quan tâm đến hệ sinh thái của nó (có rất nhiều plugin rất hữu ích).
Cập nhật
Kết thúc câu chuyện: các nhà phát triển của Công cụ mất điểm của tôi vào tài khoản, và quyết định phục hồi các thay đổi. Kudos cho điều đó!
TL; DR - Không có. –
(Ngoại trừ có lẽ bằng cách sử dụng một số cơ sở gỡ lỗi.) –
Đây có phải là thời gian biên dịch mà bạn muốn hoặc một thời gian chạy (như trong sự phản ánh)? –