Tôi là người mới đến Javassist và tôi đã đọc một số hướng dẫn liên quan đến nó.Chúng ta có thể thêm một trường không nguyên thủy vào một lớp hiện có bằng cách sử dụng javassist không?
Vì tôi cần thực hiện một số thao tác chèn bytecode trong mỗi phương thức nhập hoặc trước khi thoát phương thức và nhận một số thống kê từ điều này.
Qua hướng dẫn javassit trực tuyến, tôi thấy rằng chúng ta có thể tạo ra một lĩnh vực mới cho một lớp hiện có:
CtClass point = ClassPool.getDefault().get("Point");
CtField f = new CtField(CtClass.intType, "z", point);
point.addField(f);
Nhưng kiểu của CtField chỉ chứa loại nguyên thủy theo mặc định, chúng ta có thể thêm một lĩnh vực mới có loại không nguyên thủy, ví dụ, ArrayList?
Nếu tôi có thể thêm trường ArrayList mới vào lớp hiện có, vì lớp không nhập java.util.ArrayList, liệu nó có gây ra lỗi biên dịch không?
Cảm ơn, mã trên có nghĩa là chúng tôi thêm thành viên ArrayList mới vào lớp điểm, nhưng trong lớp điểm chúng tôi đã làm ' t nhập java.util.ArrayList, điều này có gây ra lỗi biên dịch không? – LifeOnCodes
Vâng, bạn thêm mã byte bytecode *** đại diện cho một trường java.util.ArrayList, không phải là một chuỗi tiếng Anh thực tế. Các câu lệnh nhập khẩu chỉ là các chỉ thị trình biên dịch không xuất hiện trong tệp lớp được biên dịch. Đó là, bằng cách này, tại sao bạn cần phải sử dụng một tên đầy đủ (FQN) khi tìm kiếm các lớp trong ClassPool. – Perception
Cảm ơn rất nhiều, tôi hiểu. Tôi nghĩ rằng tôi nên dành thời gian nghiên cứu bytecode. Một câu hỏi nữa, hy vọng bạn có thể giúp tôi, có thể cho memeber someList là một kiểu chung chung, như ArrayList someList không? –
LifeOnCodes