Tôi đang tìm một công cụ thao tác bytecode mức cao như Javassist, nhưng điều đó hiểu một số đặc điểm của Scala. Các công cụ thao tác bytecode mức thấp hơn nên tương đối thuyết bất khả tri, nhưng đối với các trường hợp sử dụng của tôi, ở mức Javassist thì tốt hơn nhiều. Tuy nhiên, một công cụ ở cấp đó cần phải biết về ngôn ngữ nguồn và ánh xạ bytecode của nó. Có cái gì như thế này tồn tại cho Scala? Cho đến nay tôi đã có thể sử dụng Javassist với Scala cho những điều rất đơn giản, nhưng tôi đã bị cắn bởi một số khác biệt Scala/Java cho một vài thứ khác.Có công cụ thao tác mã byte cấp cao của Scala như Javassist không?
17
A
Trả lời
1
Tôi không nghĩ rằng công cụ như vậy tồn tại (chưa). Tình hình hiện tại là, bạn không thể trộn các đơn vị biên dịch được biên dịch với các phiên bản khác nhau của Scala, tức là một lớp được biên dịch với Scala 2.9 sẽ không tương thích với một lớp được biên dịch với Scala 2.10.
Khi bạn sử dụng Scala 2.10, bạn có thể sử dụng Scala reflection và Scala macros để đạt được các mục tiêu tương tự như với sửa đổi bytecode. Đối với tôi, điều này trông giống như cách chứng minh tương lai nhất.
Một trong các câu hỏi của bạn nhằm thêm ID phiên bản nối tiếp. Điều này chắc chắn sẽ có thể với các macro Scala. Với các macro Scala, nó thậm chí có thể quản lý các id phiên bản nối tiếp trong cơ sở dữ liệu bên ngoài theo các thay đổi API.
Bạn đang cố gắng thực hiện nhiệm vụ nào? – Antimony
Một vấn đề mà tôi gặp phải được mô tả [ở đây] (http://stackoverflow.com/questions/17385725/how-to-add-a-serialversionuid-to-a-class-instance-in-scala) và [tại đây] (http://stackoverflow.com/questions/17384913/can-scala-2-10-reflection-emulate-this-javassist-functionality) –