Я новичок в Javassist, и я уже прочитал некоторые учебники, связанные с ним.Можно ли добавить не-примитивное поле в существующий класс с помощью javassist?
Потому что мне нужно, чтобы какая-либо инъекция байткода в каждом методе вводилась или до выхода метода, и получайте от нее некоторую статистику.
Через онлайн javassit учебник, я считаю, что мы можем сделать новое поле к существующему классу:
CtClass point = ClassPool.getDefault().get("Point");
CtField f = new CtField(CtClass.intType, "z", point);
point.addField(f);
Но тип CtField содержит только примитивный тип по умолчанию, мы можем добавить новое поле тип которого не является примитивным, например, ArrayList?
Если я могу добавить новое поле ArrayList в существующий класс, так как класс не импортирует java.util.ArrayList, это вызовет ошибку компиляции?
Спасибо, приведенный выше код означает, что мы добавляем новый someList члена ArrayList к классу точки, но в классе точки мы Ждем» t импортировать java.util.ArrayList, это вызовет ошибку компиляции? – LifeOnCodes
Ну, добавив *** байт-код ***, который представляет поле java.util.ArrayList, а не настоящую строку на английском языке. Операторы импорта - это только директивы компилятора, которые не отображаются в файле скомпилированного класса. Кстати, почему вам нужно использовать полное имя (FQN) при поиске классов в ClassPool. – Perception
Большое спасибо, я вижу. Думаю, я должен потратить некоторое время на изучение байт-кода. Еще один вопрос, надеюсь, вы можете мне помочь, возможно ли, что someList memeber будет общим типом, например ArrayList someList? –
LifeOnCodes